HTML_Template_IT – шаблонизатор от PEAR

Когда-то на заре своей карьеры программиста мне в голову пришла, как тогда казалось, гениальная идея – отделить логику от представления. Я принялся писать свой парсер html-страниц . Позже, я узнал, и для меня это было шоком, что все уже придумано до меня. Мне посоветовали Smarty, я попробовал, оказалось, что игрушка интересная. Но на одном проекте, это был большой сайт одного клуба по боям без правил, заказчик захотел, чтобы использовался совершенно неизвестный мне шаблонизатор – HTML_Template_IT из библиотеки PEAR.

Он совершенно отличается по своему принципу от Smarty – это, так называемый, пассивный шаблонизатор. В данном типе шаблонизаторов циклы, условия обрабатываются в php-файле, а страница разбита на блоки, которые парсятся отдельно друг от друга.
Но начнем с азов – инициализация шаблонизатора и подгрузка шаблона.

$Template = new HTML_Template_IT();
$Template-> loadTemplatefile(‘мой_файл.tpl’, true, true);

Кстати, в примере, который можно скачать (внизу поста) все выглядит несколько иначе, там все реализовано через класс BasicTemplate, который наследуется от HTML_Template_IT. Зачем он нужен, я опишу ниже, не отвлекаемся
Итак, переменные в шаблоне выглядят просто – {имя_переменной}. Подставить нужное вам значение можно в php-файле следующим образом:

$Template->setVariable(‘имя_переменной’, ‘значение переменной’);
Если вам необходимо за один раз установить несколько переменных, то можно в качестве параметра передать ассоциативный массив. В таком случае предыдущий пример будет выглядеть так:

$aVars = array(‘имя_переменной’ => ‘значение переменной’);

$Template->setVariable($aVars);
Блоки – наиболее интересная часть этого шаблонизатора. Итак, допустим, нам нужно вывести какой-то див несколько раз с различными значениями. В шаблоне создаем, например, вот такой код:

<h3>Пример цикла</h3>
Цифры от одного до пяти:

<!-- BEGIN test_for -->
<strong>{var_test_for}</strong>
<!-- END test_for -->

Как некоторые уже догадались, блок выглядит так:

<!-- BEGIN имя блока -->

Тело блока – все что вы хотите в нем отображать

<!-- END test_for -->

Парсить блок можно также двумя способами – задать заранее блок потом определить ему переменные или вначале задать переменные, потом запарсить блок, я использую второй – он короче.
Итак, первый способ будет выглядеть так (выводим числа от одного до 5):

for($i=1;$i<6;$i++)
{
	$Template ->setCurrentBlock('test_for );
	$Template ->setVariable('var_test_for', $i);
	$Template ->parseCurrentBlock();
}

Второй, так:

for($i=1;$i<6;$i++)
{
	$Template ->setVariable('var_test_for', $i);
	$Template ->parse('test_for');
}

Некоторые замечания по работе с блоками:

Имя блока обязательно должно быть отделено пробелами
Блок, для которого вы не установили ни одной переменной, не будет отображен при выводе, даже если вы вызовете: $Template ->parse(‘test_for’);
Также наоборот – если вы установили какую-то переменную, но не вызвали $Template ->parse(‘test_for’), блок отобразится
Для того чтобы при определенном условии отобразить блок, в котором переменные не нужны можно использовать два способа – кривой:
Засунуть в блок переменную и запарсить её с пустым значением, типа:

$Template->setVariable('var_test_for', '');

И нормальный способ – вызвать touchBlock(), например:

$this->touchBlock('without_vars');

Ну и финальное – это отображение результата парсинга:

print $Template->show();

Вот наш результат. Архив, который вы можете скачать, содержит работающий код, приведенных примеров, но там есть класс BasicTemplate, от которого и наследуются все страницы. Он нужен для следующих целей: когда страниц много, для них всех есть одинаковые переменные, типа адреса сайта, папки со стилями, javascript файлами, картинками. Для того чтобы не парсить по нескольку раз одно и тоже, и создан этот класс, конечно не только, но об этом в следующих постах.

Кстати, стал замечать, что с курса где-то 5-го от интенсивной работы за компьютером мое зрение стало падать, раньше, были две единицы, еще в своем армейском взводе снайпером числился, сейчас, не уверен, что все так хорошо. Но, кажется, выход есть, друг моего блога С. Леднёв, опубликовал несколько способов сохранить зрение при работе за компьютером. Надеюсь, кому-нибудь, да поможет данная ссылка, ведь программист без зрения, как маршрутчик без перегара – если и есть, то ненадолго