Pull to refresh

Ответы модулей

Reading time2 min
Views823
Доброе время суток!

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

В этой статье речь пойдет об «ответах» модулей (более умного названия, к сожалению, придумать не смог). Грубо говоря под ответом я подразумеваю return $var некого метода или функции. Здесь надо оговориться, что используется шаблон проектирования MVC, где модуль — это, естественно, модель. Далее немного общих слов от том, как в моей CMS работает MVC.

Задача главного контроллера — вызвать метод модуля (модули представлены классами) и вернуть его ответ представлению. В качестве представления выступает не сразу шаблонизатор, а промежуточный «контроллер», который уже общается с шаблонизатором. Во примерный рисунок:

image

Теперь о главном — ответах модулей. В моей CMS ответом модуля всегда должен быть объект класса ModuleResponse. Объект этого класса хранит любые другие объекты, которые будет обрабатывать шаблонизатор. Благодаря такому способу мы избавляемся от необходимости писать код обработки шаблонов в модулях, тем самым убираем привязку модулей к конкретному шаблонизатору и, более того, получаем возможность использовать несколько шаблонизаторов одновременно. Таким образом не составит труда перейти с XSLT на Smarty или что-либо еще.

Особо важным среди достоинств для меня является то, что для генерации шаблона (который пойдет непосредственно в HTML-код страницы) и генерации XML-ответа для AJAX можно использовать один PHP-код.

При использовании вышеописанного способа в коде модуля получаем:

$oResponse = new ModuleResponse;
$oResponse->setTemplate ('blogs/post'); // шаблонизатор на свой вкус может выбрать расширение файла шаблона
$oResponse->addObject ($object);
return $oResponse;


Подразумевается, что интерфейс объекта, «положенного» в ответ модуля, позволяет получить все его свойства или построить XML. В случае с XML в моей CMS все объекты, которые попадают в ModuleResponse должны иметь метод __toXML (), что позволяет на ходу вводить новые классы объектов.
Tags:
Hubs:
+3
Comments12

Articles

Change theme settings