We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 36726
    • 1 Posts
    Здравствуйте. Я являюсь опытным web-разработчиком, но ничего не смыслю в modx. Разработал много проектов с использованием своих фреймворков, но недавно возникла надобность использовать что-то открытое, что смогут сопровождать и поддерживать люди после меня (свои фреймворки, особенно один из них, крайне трудно отчуждаем). В связи с этим я решил освоить modx и у меня возник следующий вопрос.

    Я строил свои проекты по следующей логике:

    • 1. Запрос страницы попадает в ядро системы где определяется какую страницу запросил пользователь;
    • 2. Вызывается контроллер страницы, который обрабатывает пришедшие от пользователя данные, например, данные формы, настройки фильтра (при выводе табличных данных), номер страницы, настройки сортировки и пр. Т.е. он валидирует и преобразует пользовательские данные в формат пригодный для обработчика бизнес-логики (model);
    • 3. Контроллер обращается к модели, передавая ей введенные (и обработанные контроллером) пользовательские данные;
    • 4. Модель обращается в БД (и прочим стораджам, включая кэши) и возвращает в контроллер результат в виде raw-данных;
    • 5. Контроллер передает raw-данные из модели (а так же пришедшие от пользователя) в шаблонизатор (view);
    • 6. Шаблонизатор форматирует raw-данные в html и выводит их в браузер.

    У меня есть ощущение, что modx не приспособлен для данного подхода: в нем мы из ядра системы попадаем прямиком в шаблон, в котором должны перво-наперво вызвать сниппет контроллера, в этом сниппете мы должны обратиться к другому сниппету с моделью, дальше не понятно что делать с результатом. По логике modx мы должны его в этом же сниппете отформатировать (вероятно с использованием чанков) и передать результат в шаблон. Но сам факт смешивания логики контроллера и логики view в одном сниппете мне не нравится, я бы хотел использовать в качестве шаблонизатора smarty, значит мне в этом же сниппете придется инициализировать смарти, и передать ему имя с файлом-шаблоном (при этом редактирование этого файла не будет доступно из админки modx, т.е. мне работать с ним вручную?)?

    В общем, я совершенно не понимаю как могу приспособить modx под привычные для меня концепции и был бы благодарен если бы кто-то описал мне как мне в modx получить логику работы, которую я применял в своих фреймворках. Т.е. как мне сделать контроллеры, которые будут вызываться до шаблонов, как мне сделать чтобы шаблон обрабатывался smarty, а не собственным парсером?
      • 1477
      • 515 Posts
      Можно через плагины. Плагин будет служить контроллером. Загружаем нашу модель через
      $modx->getService('mymodel','myModel','/path/to/');

      http://rtfm.modx.com/display/revolution20/modX.getService
      обрабатываем, например, введенные пользователем данные. И потом сниппетом их выводим
      $modx->mymodel->data

      Сниппет может использовать Смарти. А шаблоны в админке это не всегда удобно.
        Shopkeeper - сниппет и модуль для создания интернет-магазина.
        TVimageResizer - плагин для изменения размеров (а также наложения водяных знаков и скругления углов) картинок TV при создании документа.
        PickDocsInTree - плагин для выбора документов из дерева.
        Paykeeper 1.5 - Сниппет для онлайн-оплаты в интернет-магазине MODx + Shopkeeper (Webmoney и Robokassa).
        • 34945
        • 15 Posts
        MODx использует MVC по-полной, т.к. сам на нем построен. ИМХО совершенно незачем городить свои модели и контроллеры, все это есть.
        Ссылочки:
        http://rtfm.modx.com/display/revolution20/PHP+Coding+in+MODx+Revolution%2C+Pt.+I там с продолжением, о том, как вообще что-то под него разрабатывать. Ну и это будет полезно:
        http://rtfm.modx.com/display/revolution20/Using+Custom+Database+Tables+in+your+3rd+Party+Components

        А вообще, если вы собираетесь писать вручную свою MVC, то зачем вам modx? Тогда обратите внимание на Zend, под него тоже много кто сможет поддерживать проект.