Зарегистрироваться Войти Редактировать К списку тем

Тестовый форум Still Life

Общая концепция шаблонов

Создана vitus 21.04.2008 22:09
Описание системы шаблонов, более общее, чем то, что содержится в теме про форумные шаблоны
Высказаться
21.04.2008 22:27 (ссылка)
vitus

Статус: Отец-основатель
Email: vitus@wagner.pp.ru

Язык шаблонов StillLife в отличие от большинства других систем обработки шаблонов (включая Django, Communiware и php) базируется не на тексте, а на DOM-дереве HTML.

То есть любой шаблон представляет собой валидный HTML. В отличие от XSLT здесь нет специальных элементов, которые описывают действия. Всю необходимую функциональность несут классы (и иногда идентификаторы) элементов, благо в HTML 4.01 все элементы могут иметь атрибуты class и id.

Возможные конструкции языка шаблонв:

Подстановка значений
содержимое элемента данного класса и/или некоторые его атрибуты заменяются на некоторое генерируемой программой (например в результате обработки пользовательского ввода) содержимое. В некоторых случаях (например при подстановке юзерпика) набор элементов, к которым применяется данная подстановка ограничен.
Условная подстановка значения
Здесь должны присутсвовать два элемента с указанными (разными) классами (а может сделать одинаковыми и проверять на вложенность?). Если подставляемое значение присутствует, то содержимое/атрибуты внутреннего элемента заменяется на это значение, и внешний элемент делается видимым, иначе внешний элемент делается невидимым или удаляется из сгенерированной страницы.
Условный блок
Если указанное условие не выполняется, блок делается невидимым/удаляется
Список
Здесь требуется два элемента с заданными классами. Сейчас класс объемлющего элемента делается из класса элемента списк добавлением list - message и messagelist, topic и topiclist. Объемлющий класс может включать в себя какое-то обрамление (заголовки, табличную структуру и т.д.) и как минимум один элемент. Если это элемент представляет собой щаблон-заготовку (например элемент списка сообщений в пустой теме, в которой ни одного сообщения еще не создано), скрывается весь список.

Если элементов больше одного, тэг-элемент списка со всем содержимым копируется и копия помещается непосредственно за предыдущим элементом.

Эти четыре метода обеспечивают мощность, сравнимую с системой шаблонов Django, правда, с той разницей что способ визуального представления подставляемых значений и условия по которым удаляются/повторяются блоки должны быть описаны не в шаблоне, а где-то ещё.

Это, на мой взгляд, является большим плюсом, так как полностью исключает возможность перемешивания кода и дизайна.

Вообще говоря, получается что-то похожее на MVC, с тем отличием, что в соответствии с концепцией "cайт это документ" контроллер предполагается сделать более-менее фиксированным.

Существующий скрипт forum на самом деле представляет собой жуткую смесь модели и контроллера. К сожалению, для того чтобы понять, как следует отделять модель от контроллера его надо было написать.


--
Сэр извращенец? Тогда вам на сюда