Связка MODx Revolution + LiveStreet

    Когда собирался писать свой топик, ломал голову куда же его писать? С одной стороны часть сайта написана на MODx, с другой стороны другая часть написана на LiveStreet, а с третьей стороны это такие костыли, что в пору в Ненормальное программирование писать. Оказалось, что Хабр готовился к такому повороту событий и сделал возможность писать сразу в несколько блогов, за что ему отдельный респект! :-)

    Ну а теперь собственно к основному вопросу: В свое время я написал и запустил купонный сервис, само собой написанный на MODx Revolution (само собой, потому что я ярый любитель этого движка и что бы ни писал, всегда пишу именно на этом фреймворке).
    Так вот, проект рос, развивался, много функционала было написано (благо MODx позволяет решить любую задачу), да вот только замыслилось мне на сайте еще и социалку-блог а-ля Хабрахабр запустить, да чтобы все наши пользователи там были, да чтобы отзывы по акциям туда же попадали, да чтобы отзывы были и в акциях, и в социалке, и чтобы и там и там их можно было комментировать и читать их в отдельной ветке все до кучи, и еще много-много чего… И когда я думал, сколько же мне понадобится времени, чтобы напрограммировать это все самому, я делался очень грусным...

    Но вспомнил я про LiveStreet, о котором слышал давно-давно, и то, что он позиционируется как легкий и быстрый клон Хабра. И вот решил я отдельно социалку поднять на LS и увязать его с моим основным сайтом на MODx. LiveStreet установил и запустил за пару часов (это мое первое знакомство с этим движком).

    Забегая немного вперед, даю совет: если решите повторить такое же, то когда разворачивать LS буде, таблицам дайте уникальный префикс, отталкиваясь от префикса таблиц MODx. К примеру, если у вас для MODx префикс modx_, то для LS дайте что-то типа modx_ls_, чтобы потом можно было дописать свой модуль под MODx и создать для него схему с учетом префикса, чтобы можно было без костылей работать с таблицами LS. Кстати, для этого вам может быть полезен вот этот топик.

    Далее отредактировал шаблон регистрации пользователей, запретив в нем прямую регистрацию на сайте, указав пользователям, что регистрироваться надо на основном сайте, а не здесь. Для понимания обозначим, что MODx — это будет основной сайт pro-cent.ru, а LS — это forum.pro-cent.ruВ общем далее на MODx в таблицу modx_users добавляем ключик на табличку ls_users, чтобы потом средствами MODx легко можно было обратиться к пользователю LS через запись о пользователе MODx.

    Честно сказать, я пока еще не супер знаю LiveStreet, и пока еще всерьез не рассматривал вариант единой таблицы пользователей сразу и для MODx и для LS, но в принципе у меня настроен вторичный ключ на таблицу с блокировкой при удалении, что обеспечивает целостность данных на уровне базы данных, и в целом проблем даже при отдельных таблицах пользователей не возникает.

    В общем далее надо просто прописать свое API для взаимодействия MODx с LS. Кто-то возможно напишет его через require 'LS/public_html/index.php', у меня все через POST посредством CURL с передачей нужных параметров и ключем для защиты запросов, чтобы какой-нибудь робот не наплодил вам чего-нибудь :-)

    Я не буду сейчас в даваться в подробности, как там все сделано, так как топик написан больше не как конкретный мануал, а так, для общего развития, но если кому-то идея понравится и кто-нибудь захочет провернуть и у себя такое, велкам, вопросы в студию, отвечу.

    P.S. Забыл сказать, что на MODx еще и активность из социалки выводится. Если зайдете на главный сайт, увидите ее в правой колонке.

    P.P.S. Тут жалоба поступила, что все-таки нужны технические моменты описать более развернуто. Хорошо. Опишу общую схему API, которую я применил для взаимодействия основного сайта с LS.

    Сразу скажу, что LS — довольно оригинальный движок, и очень активно использует noSQL в качестве основы для кеширования, потому очень не рекомендую напрямую работать с базой данных социалки, а работать через его Actions (я не буду тут писать мастер-класс по LiveStreet, его вам придется освоить самостоятельно).

    В качестве заготовки для всего остального, опишу процедуру создания топика и комментария к нему посредством запроса из основного сайта.
    Сначала в LS добавляем свой Action, через который будем вызывать запрос. Для этого создаем свой модуль-конфиг, например config/modules/modx (он нам понадобится в дальнейшем для всех запросов) и создаем в нем файл config.route.php. Он нам понадобится для того, чтобы прописать свои УРЛ-ы для движка.В нем пишем следующее:
    $config['page']['modxtopic'] = 'ActionModxTopic';
    $config['page']['modxblog'] = 'ActionModxBlog';
    return $config;


    Этот конфиг понадобится движку, чтобы определить по УРЛ-у какое действие выполнить. В данном случае будут УРЛ-ы /modxtopic и /modxblog. При обращении к этим УРЛ-ам будут вызваны действия с классами /classes/actions/ActionModxTopic.class.php и /classes/actions/ActionModxBlog.class.php соответственно.
    Само собой вы должны создать для себя нужные классы по образу и подобию, плюс к этому обязательно еще и файлы-шаблоны по принципу /папка шаблонов (обычно /templates/skin/скин сайта)/actions/ваш Action (в данном случае ActionModxTopic или ActionModxBlog)/index.tpl или действие.tpl
    В общем это все придется вам на практике изучить, потому что в трех строчках не описать.

    Я для себя эти классы продумывал так, чтобы перегрузить базовые классы самого LS, потому что сам по себе LS не дает API для подобных действий, а базовый функционал рассчитан на то, чтобы пользователь был авторизован и нельзя было извне перегрузить пользователя. При этом не хочется писать много лишнего кода и разбираться в системе кеширования и т.п.
    В общем, мы хотим добавить топик. Работа с топиком выполняется через /classes/actions/ActionTopic.class.php, с комментами через /classes/actions/ActionBlog.class.phpСоздавая свой класс, вы перегружаете базовый класс, и пишите в нем функцию Init() и функцию вызываемого действия, например SubmitComment() класса Blog сохраняет коммент.

    К сожалению тут какая-то фигня творится с переносами, потому не могу вставить нормально 200 строк кода своего класса, в котором все прописано, потому придется дальше разбираться самим. Правда файл с кодом класса выложил здесь. Там может есть что лишнее, но в общих чертах разобраться можно будет. Там есть комментарии.

    Собственно говоря в общих чертах все и выполняется.

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 17

      +2
      Похоже на обычный пиар своего сайта
        –1
        Не указав ссылки на сайт как бы вы увидели результат? Да и какой пиар? Вы не моя целевая аудитория. У меня там в основном салоны красоты, сомневаюсь, что здесь большая часть пользователей бегает по салонам красоты.
        А написать про это мне подкинул идею bezumkin. Он тоже яросный любитель MODx-а, я ему вскользь про это в личной переписке писал, он и посоветовал написать, что это будет наверняка интересно для любителей MODx-а.
          0
          И большое спасибо за подробную статью!
            0
            Всегда пожалуйста! :-)
        0
        Офигеть. За что эту статью минусуют?

        На Хабре скоро останутся только новости и переводы.
          0
          Собственно, всякое желание отбивается что-то здесь писать… Но если это хоть кому-то надо, писать буду.
          4 лайка статьи говорит о том, что кому-то да надо :-)
            +2
            Очевидно за то, что заголовок обещает технические подробности, которых в статье нет.
              0
              Стоп! В каком месте заголовок обещает технические подробности? Можно процитировать и разжевать?

              И там есть общая обрисовка картины, плюс сказано, что если есть конкретные вопросы, задавайте.

              Но раз уж вам надо больше технических моментов, сейчас статью немного дополню.

                +3
                я просто описал свои ожидания. Лично мне интересна интеграция общей регистрации.
                  0
                  С трудом понимаю связь между вашими личными ожиданиями и тем, что обещает топик… Какая-то вообще не программерская логика.
                  Тем не менее добавил немного технического описания.
              0
              Василий, я знаю в чем проблема. В наше время бОльшая часть веб-«программистов» максимум что умеет, это развернуть готовый движок и дописать несколько мелких модулей. И более чем уверен, что большинство тех, кто минусовал, вообще не понимает в чем фишка, потому что для того, чтобы это понять и пусть даже не похвалить, а хотя бы осмысленно поспорить, надо иметь достаточно много знаний. А минус зафигачить дофига ума не надо. Что тут хоть один какой-то конструктивный коммент поступил?
              Лично мне пофигу, что мне тут минуов поставят и карму опустят. Зато я знаю, что я реально классный программист и могу много что напрограммировать и дофига кому фору дать. Знаю, что и вы — истинный программер. А этого их минусы никогда не изменят.
                0
                Я бы убрал статью в черновики, раз никому не надо.

                Себе то уже скопировал =)
                  0
                  Да ладно, пусть читают :-)
              0
              Спасибо за статью, у самого стоит задача объединения LS и ModX.
                0
                Да не за что!
                Если возникнет локальный вопрос по какой-нибудь проблеме, обращайтесь, может уже сталкивался.
                +1
                Это какой-то ужас, мало того, что написано сумбурно, без приведения конкретного кода. Да еще и используете жаргонные слова
                  +1
                  Так потому что это не мануал, а пища для размышлений для тех, кто видит идею, а реализует сам.

                Only users with full accounts can post comments. Log in, please.