Varcom
Новичок
Templus vs HTML_Template_Sigma
Специально для voituk
Приведу некоторые аргументы после первого знакомства.
1. Шаблонизатор Sigma не делает синтаксической проверки корректности шаблона.
Открывающий маркер блока без закрывающего будет воспринят как простой текст.
<!-- BEGIN test -->
Шаблонизатор Templus отругается, что в шаблоне имеется ошибка, нет закрывающего маркера.
<!--{test{-->
2. В шаблонизаторе Templus используется объектная модель организации данных. Это значит, каждый шаблон, каждый вложенный блок, каждая переменная - это отдельный объект. Вы можете получить указатель на любой объект в шаблоне и управлять его свойствами. Обращение к вложенным объектам происходит, через родительские объекты. Причем сам корневой шаблон, является таким же объектом, как вложенные в него подшаблоны (блоки), имеет те же самые методы и свойства. Поэтому управление корневым шаблоном и всеми вложенными в него подшаблонами производится идентично.
В шаблонизаторе Sigma, сам корневой шаблон и вложенные в него блоки являются разными сущностями. Т.е. доступ к тем и другим осуществляется по разным правилам. После загрузки шаблона, все блоки и все переменные хранятся в плоском виде - в виде массива блоков и массива переменных. Отсюда начинаются проблемы:
а) в коде программы эти блоки логически никак не связаны. Это значит, программисту, просматривающему программу после нескольких месяцев от предыдущей правки, тяжелее будет разобраться в логике.
Сравните код:
и
или тоже самое в сокращенном виде:
Какой вариант говорит о логическом расположении блоков, их вложенности?
Справедливости ради надо сказать, что в Sigma есть процедура получения списка вложенных блоков. Но от этого слаще не становится. Выборка вложенного блока по имени превращается в геморрой.
б) В Sigma нельзя назвать два шаблона и две переменные одним именем, даже если они имеют разные уровни вложенности.
В Sigma нельзя написать нечто вроде:
Программисту, работающем с Sigma придется каждый раз придумывать уникальное имя блока и переменной.
в) из б) следует, что нельзя написать процедуру обрабатывающую сущности с одинаковой структурой, вроде:
Остальные мысли приведу позже, в случае заинтерсованности.
Специально для voituk
Я начал изучать HTML_Template_Sigma. Честно говоря, знакомство с этим средством не очень впечатлило. Есть немного от моей идеологии - все шаблоны и подшаблоны собраны в одну страничку, в том виде в каком они будут отображаться. Только вот, реализована эта идеология слегка криво.Делаем вывод - Templus в данном случае удобнее FastTempate отсутсвием необхоимости определять блоки.
Но ведь на FastTemplate свет клином не сошелся - есть например HTML_Template_Sigma , разработанный Sad Spirit.
Опять же делаем вывод, что ничего нового, кроме альтернативного синтаксиса и непонятных констант Templus не демострирует.
Приведу некоторые аргументы после первого знакомства.
1. Шаблонизатор Sigma не делает синтаксической проверки корректности шаблона.
Открывающий маркер блока без закрывающего будет воспринят как простой текст.
<!-- BEGIN test -->
Шаблонизатор Templus отругается, что в шаблоне имеется ошибка, нет закрывающего маркера.
<!--{test{-->
2. В шаблонизаторе Templus используется объектная модель организации данных. Это значит, каждый шаблон, каждый вложенный блок, каждая переменная - это отдельный объект. Вы можете получить указатель на любой объект в шаблоне и управлять его свойствами. Обращение к вложенным объектам происходит, через родительские объекты. Причем сам корневой шаблон, является таким же объектом, как вложенные в него подшаблоны (блоки), имеет те же самые методы и свойства. Поэтому управление корневым шаблоном и всеми вложенными в него подшаблонами производится идентично.
В шаблонизаторе Sigma, сам корневой шаблон и вложенные в него блоки являются разными сущностями. Т.е. доступ к тем и другим осуществляется по разным правилам. После загрузки шаблона, все блоки и все переменные хранятся в плоском виде - в виде массива блоков и массива переменных. Отсюда начинаются проблемы:
а) в коде программы эти блоки логически никак не связаны. Это значит, программисту, просматривающему программу после нескольких месяцев от предыдущей правки, тяжелее будет разобраться в логике.
Сравните код:
PHP:
// Sigma
$tpl->setCurrentBlock('template2');
$tpl->parseCurrentBlock();
$tpl->setCurrentBlock('template1');
$tpl->parseCurrentBlock();
PHP:
// Templus
$tplTemplate1 = $Template->Child('Template1');
$tplTemplate2 = $tplTemplate1->Child('Template2');
$tplTemplate2->Evaluate();
$tplTemplate1->Evaluate();
PHP:
$Template->Child('Template1')->Child('Template2')->Evaluate();
$Template->Child('Template1')->Evaluate();
Справедливости ради надо сказать, что в Sigma есть процедура получения списка вложенных блоков. Но от этого слаще не становится. Выборка вложенного блока по имени превращается в геморрой.
б) В Sigma нельзя назвать два шаблона и две переменные одним именем, даже если они имеют разные уровни вложенности.
В Sigma нельзя написать нечто вроде:
PHP:
<!--{Table111{-->
<table>
<!--{Row{-->
<tr>
<!--{Col{--><td> {$Value} </td><!--}Col}-->
</tr>
<!--}Row}-->
</table>
<!--{Table111{-->
<!--{Table222{-->
<table>
<!--{Row{-->
<tr>
<!--{Col{--><td> {$Value} </td><!--}Col}-->
</tr>
<!--}Row}-->
</table>
<!--{Table222{-->
в) из б) следует, что нельзя написать процедуру обрабатывающую сущности с одинаковой структурой, вроде:
PHP:
function ProcTable($Table){
$Table->Child('Row')->Child('Col')->Evaluate(array('Value'=>'1'));
$Table->Child('Row')->Evaluate();
}
ProcTable($Table1);
ProcTable($Table2); // структуру таблиц смотри выше.