Для начала определимся на берегу, что идеальный шаблонизатор это элемент "View" парадигмы MVC.
Идеальный шаблонизатор не должен быть привязяан к какой -то конкретной парадигме.
Базовая функциональность шаблонизатора:
- подстановка переменных
- условное ветвление
- организация циклов
- включение другого шаблона
- вызов функциональных модулей (для активных шаблонов)
Вряд ли кто-то будет оспаривать данный список.
Bakti9rov привёл более правильный список:
а) шаблонные сущности
б) шаблонная разметка (блоки, "теги") и
в) шаблонные правила, которые в зависимости от разметки преобразуют шаблон.
Но оказалось, что кроме функционального кода, существует еще код представления.
В Event Driven подходе логика представления красиво укладывается в событие "onShow" объектов, в котором меняется какой нибудь атрибут объекта, например "class". А уже для каждого значения атрибута дизайнер пишет шаблон и CSS стиль. И всё!
Напомню, что образец идеального шаблона будет иметь примерно такой вид:
Не согласен с таким примером. Не забывайте, что вся структура документа представляет собой дерево, наиболее удачное и гибкое решение предоставляет XSLT:
Код:
<xsl:template match="tree">
<ul>
<xsl:apply-templates />
</ul>
</xsl:template>
<xsl:template match="item">
<li>
<xsl:apply-templates />
</li>
</xsl:template>
Обратите внимание - xsl:apply-templates, вот тот элемент абстрактности (и не единственный), который делает XSLT таким гибким и позволяет увеличить коэффициент повторно используемого кода.
Для примера с таблицей не нужно никаких вложенных циклов, просто добавляется ещё один шаблон:
Код:
<xsl:template match="table">
<table>
<xsl:apply-templates />
</table>
</xsl:template>
<xsl:template match="row">
<tr>
<xsl:apply-templates />
</tr>
</xsl:template>
<xsl:template match="cell">
<td>
<xsl:apply-templates />
</td>
</xsl:template>
XSLT наиболее близок к идеальному шаблонизатору, вот только если б не этот синтаксис :-(
Вторая задача немного из другой степи. В принципе она решается базовой функциональностью, но де факто имеет очень "неопрятный" вид. Я говорю о создании форм. Из рассмотрения исключаются генераторы форм, вид которых задается где-то в другом месте, кроме шаблона. По сути задача состоит в создании генератора форм, встроенного в шаблонизатор.
Дело в том, что в форма представляет собой совокупность элементов управления, т.е элементов, с которыми связана некоторая функциональность. А функциональность у нас размещается в коде приложения.
Гораздо удобнее рассматривать элемент управления как объект приложения, в котором инкапсулирована его функциональность, а отображением элемента на форме занимается уже шаблонизатор, которому передаются от объекта все необходимые данные.
Да все нормально, это ж оффтоп Просто по-моему ты пока единственный, кто понял как работает MACRO.
А ты похоже не единственный, кто не понял требований к шаблонизатору
Ты всё-таки попробуй вплотную поработать с XSLT, не обращая внимания на синтаксис.