@Warrangie
Нет

Как сделать «модульную» cms?

Пишу свою cms, учусь, использую fatfree фреймворк, по этому гайду сделал mvc https://foysalmamun.wordpress.com/2013/03/27/fat-f...
Вот так выглядит главный шаблон:
<?php
	include('header.html');
	include('error.html');
	include($view);
	include('footer.html');
?>

Не могу понять как реализовать модульность, если это так называется. $view - обычный html шаблон страницы с контентом, который передается в контроллер и уже в layout рендерится самим фреймворком.
Горизонтальное меню можно прикрепить в header.html, но тогда не получится передавать в него никаких данных, то есть динамическое меню отпадает. Тоже с вертикальным. Если же передавать в него данные, то придется каждый раз это делать в каждом контроллере и в каждом шаблоне его рисовать отдельно, а не инклюдить один общий html. Но это же не дело. Как быть?
  • Вопрос задан
  • 509 просмотров
Пригласить эксперта
Ответы на вопрос 4
madmages
@madmages
Человек прямоходящий
есть внимательней посмотреть на MVC то ты увидишь что соль такого патерна в том что контроллер является связующим звеном между вью и моделью.
То есть если ты говоришь про модульность то получается у тебя каждый модуль это по сути своей один контроллер.
То есть шапка - это контроллер(или группа контроллеров), левый блок сайта тоже контроллер(или группа).

Так же если ты будешь использовать такую сущность как "группа контроллеров" то у этой сущности должен быть триггер который можно дернуть и у тебя отрендерится вся группа сразу и получишь в итоге кусок html этой группы и т.д.
Ответ написан
customtema
@customtema
arint.ru
HMVC
Ответ написан
Комментировать
@JustRoo
На уровне проектирования собственной CMS, тем более модульной, уже требуется переходить с банального "инклюдим файлы из папочки с модулями" на что-то посерьёзнее, а это требует и хорошего понимания самого PHP, и хорошего понимания ООП в целом: паттерны, инкапсуляция, наследование, полиморфизм, корректное использование замыканий и так далее. Лично я вижу два возможных пути развития в этом направлении:
1) От практики к теории, то есть найти какой-то популярный фреймворк, расковырять его, посмотреть, как он устроен, и разобраться/спросить, почему он устроен именно так, а не иначе;
2) От теории к практике: почитать про программную архитектуру (хотя бы книжку "банды четырёх" про паттерны и какие-то базовые вещи из Фаулера), продумать архитектуру своей CMS и начать думать, как это правильно закодить.

Единственно правильного ответа на вопрос "как организовать модульность" не существует, есть разные подходы со своими плюсами и минусами. В качестве самого базового можно рассматривать паттерн Наблюдатель (в php традиционно реализуется через SplObserver, а одна из самых популярных его реализаций - система Event Dispatcher из Symfony). Про разные способы его воплощения в коде можно почитать вот здесь.
Ответ написан
Комментировать
@deleted-webter
О себе вот тут такой рассказ. Бит среди терабайтов
Горизонтальное меню можно прикрепить в header.html, но тогда не получится передавать в него никаких данных, то есть динамическое меню отпадает. Тоже с вертикальным. Если же передавать в него данные, то придется каждый раз это делать в каждом контроллере и в каждом шаблоне его рисовать отдельно, а не инклюдить один общий html. Но это же не дело. Как быть?

Подключай общий шаблон .
html
body

if menu = true {include menu}

if content = true {include content}

body
/html
-------------------------
controller

menu = true
menu_data() = array
menu_data[list1] = list1; и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы