Не сочтите за рекламу... Вопрос такой. Я написал свою CMF (она разрабатывалась достаточно долго, неспеша, в данный момент это почти полноценная RC), многократно пытался найти готовое решение, но всё время что-то было не так. В последнее время наиболее симпатичен Zend Framework, но у него один большой минус - сыроват, и многих нужных вещей ещё нет (хотя другие многие нужные вещи уже есть ). Ну и к теме. В своей системе я использую компилируемые шаблоны, с синтаксисом очень близким к смарти, только маленький и шустренький (5к движок + 20к компилятор, подгружаемый только по необходимости). Имеется встроенная логика (блоки if, foreach, foreachelse), плагины (блоки: cache, capture, htmlize; команды: counter, cycle, include [вложение других шаблонов], set [assign]) и плагины компилятора (блоки; обработка переменных: addslashes, date, format, htmlize, replace, tolower, toupper, truncate). На днях добавил плагин fetch - он позволяет вызвать специальный объект и запросить данные (через обычный вызов метода). Ну, например: Код (Text): {fetch polls} // дальше рисуем формочку опроса, или выводим его результат - // в зависимости от значения $polls, который является многомерным // массивом, и в частности, содержит информацию об опциях // и результатах Удобно в том плане, что обрабатывают запросы разные файлы (разные классы, ala controllers в ZendFramework), и неохота каждый раз при обращении к шаблонам выдёргивать значение из БД, и передавать шаблон. В данной ситуации шаблон самодостаточен. Понимаю, что местами архитектура хромает, но не это главное. На форуме (не только на этом) видел мнения, что в шаблонах не должно быть не какой логики. Поэтому возникает вопрос - насколько уместны подобные вещи в шаблонах? Моё имхо - шаблон должен отображать переданные (или запрошенные) данные. Уж какую логику он при этом использует - это его проблемы (это и обработка массивов, и циклическая смена цвета рядов таблицы и тому подобные вещи). Причём в моём понимании вышеописанный пример с шаблоном, который сам запрашивает нужные данные (однако логика по получению данных всё же не в шаблоне) - нормальна. Как вы думаете, какая логика уместна в шаблонах? Просто я до сих пор не до конца понимаю, что же подразумевается под "плохой" логикой, которой не должно быть в шаблонах (сколько не читал материала на эту тему). И как следствие предыдущего вопроса - что, по вашему, лучше - статичные шаблоны (имеющие крайне минималистическую логику) или компилируемые (с более широкими возможностями)? P.S: Извините за некоторую сумбурность... Пишу ночью, не спится (сбил график напрочь), так что мысли слегка путаются
Статичные шаблоны когда их логики хватает Компилируемые когда использовать статику не возможно в принципе
у меня в шаблонах используются конструкции {%if (..) }..{%else}...{/if} {%php}....{/php} {%include ...} //по умолчанию отключено мне хватает
svk То что тебе хватает не означает что хватит всем, бывают сайты где 10 000 посетителей это далеко не придел (и это я только рассматриваю "скоростной" аспект)
Шаблон ничего не запрашивает и ничего не отображает. Это просто место, в котором храниться html код отделённый от программного кода приложения. Внедрение таких шаблонов даже не требует изменения принципов работы скриптов/логики объединения данных с html кодом, т.к. не накладывает особых условий на проектирование кода. Внедрение в шаблон логики нарушает этот закон и вводит новый логический слой/задачу/необходимость/понятие - программирование шаблонов. Лично с моей точки зрения как человека, разрабатывавшего (-ющего в свободное время) относительно крупный проект, это приводит лишь к общему усложнению прикладного кода, разрастанию его объёмов, замедлению его работы и усложнению его поддержки и сопровождения, необходимости всюду "таскать за собой" библиотеку шаблонизатора имеющую здоровенный размер. Помимо этого при каждой "необходимости" нужно проводить обучение новых сотрудников синтаксису "языка программирования шаблонов", или искать тех, кто уже с ним знаком.