Решил осваивать blitz, но не знаю каким образом прикрутить его к самописному MVC движку, т.к. получается у шаблонизатора blitz необходим свой контроллер шаблона.
Получается модель не MVC, а MVC + Контроллер шаблона.
В моем движке пользовательский запрос обрабатывается следующим образом:
(для примера опишу страницу отображения новости)
0. запрос пользователя на определенный url
1. класс router определяет какой котнроллер подгрузить -include_once controller/news_controller.php
1.1 и какой метод вызвать (существует ли метод у подгруженного котроллера)
2. контроллер news обращается в модель model/news_model.php для получения данных новости
3. этот же контроллер определяет имя файла-шаблона templates/news/one_news.tmp
3.1 отдает данные и название шаблона в класс view
4. класс view вставляет данные в шаблон
4.1 проверяет есть ли дополнительные блоки в шаблоне (нашел блок "похожие новости", и блок "комментарии")
5 view подгружает(include_once) контроллеры найденных блоков news_controller.php и comment_controller.php
6. контроллеры комментариев грузят модель, потом возвращают html
обратно в класс view
7. класс view выдает html пользователю....
(примерная схема)
Вся эта схема рушится с блитзом на пункте 4.1, т.к. я не понимаю как реализовать поиск блоков в шаблоне.
Мне кажется мой подход неверным, верным думаю иметь все данные в одном месте перед передачей шаблонизатору blitz (или контроллеру шаблонизатора).
Прошу поправить меня и посоветовать решения и/или "правильную" схему(порядок действий) вывода страницы пользователю.
в чём проблема работать с контроллером шаблона? туда уходит вся логика, программист пишет код на своем языке, ничего не путается с HTML. в этом и есть задумка blitz.
@fisher Правильно я понимаю, что у каждого шаблона страницы есть свой контроллер шаблона?
Если правильно, то схема генерирования страницы следующая:
1. запрос пользователя
2. определяем контроллер страницы
3. подгрузили все данные касающиеся страницы
4. передали данные в контроллер шаблона
5. контроллер шаблона подгрузил шаблон страницы
6. выдали пользователю
Последовательность действий такая?
А как тогда добавить один блок, допустим "популярные новости на сайте за неделю", в общий дизайн сайта? Получается, что надо его будет указать в каждом контроллере шаблона или контроллере страницы , где мы хотим его использовать? (а если много страниц >10)
Я не могу для себя уяснить простую вещь:
Есть главная страница сайта, у нее есть свой контроллер. На этой странице будут размещены разные блоки "последние новости", "популярные новости", "Рейтинг пользователей", "последнее видео" и у каждого блока соотвественно есть свой контроллер. Откуда главная страница знает, что на ней должны быть отображены именно эти блоки?! (с нативными шаблонами или другими, можно было бы прописать тег и он бы сам вызвал контроллер этого блока и нарисовал бы данные.
Получается схема такая:
Проверяется основной шаблон на предмет блоков, а потом вызываются контроллеры и возвращают данные в те места, где были вставлены.
С Blitz необходимо предварительно собрать все данные в контроллерах, но откуда мы узнаем список контроллера, которые неоходимо вызвать для получания данных и последующей передаче контроллеру шаблона.
Последовательность действий такая, как написано выше, да. Концепт называется "пассивные шаблоны": шаблон не определяет, какие доставать данные и отвечает только за отображение (в blitz можно делать активные шаблоны через вызов функций, но я лично против активных шаблонов). Повторяющиеся блоки можно сделать кучей разных способов: инклюдом, переменной в которую впарсивается html от другого шаблона, функцией. У каждого блока не нужен свой контроллер.