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

