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