HTML::Template
Материал из Википедии — свободной энциклопедии
HTML::Template — «легковесная» перл-библиотека для работы с шаблонами, позволяющая разделять код, данные и представление.
Если вы ищете хорошую библиотеку для работы с шаблонами, то прежде всего обратите внимание на Template Toolkit — наиболее мощное решение для такого рода задач в мире Perl. Как это ни парадоксально, Template Toolkit более прост в изучении, написании, но обладает гораздо большими возможностями чем HTML::Template. Описываемая в этой статье библиотека позволяет писать лишь простейшие шаблоны, почти напрочь лишённые программной логики.
Содержание |
[править] Возможности/преимущества/специфика
В HTML::Template используется свой мини-язык, по написанию схожий с HTML-тэгами.
Пример шаблона:
<html> <head><title> <TMPL_VAR NAME="title"> </title></head> <body> Вывод списка: <ul> <TMPL_LOOP NAME="items"> <li> <TMPL_VAR NAME="item"> </li> </TMPL_LOOP> </ul> </body> </html>
И вызывающий его скрипт:
#!/usr/bin/perl use HTML::Template; my $template = HTML::Template->new(filename => 'test.tmpl'); $template->param(title => "Заголовок страницы"); $template->param(items => [ {item => 'один'}, {item => 'два'}, {item => 'три'}, ]); print "Content-type: text/html\n\n"; print $template->output();
- Может кэшировать шаблоны в память, общую память (shared memory) или на диск.
[править] Недостатки
- Не позволяет обращаться напрямую ко вложенным структурам, таким как хэши массивов и тому подобным.
- Шаблоны можно вкладывать один в другой по схемам сверху-вниз и снаружи-внутрь. Строить шаблоны изнутри-наружу нельзя.
- Переменным нельзя присваивать значения, и вообще, производить с ними какие-либо операции, с них можно только считывать. Из-за этого не получится реализовать шаблонную логику уровня сложности выше простого.
- Из циклов присутствует только foreach, что позволяет вывести только последовательный список.
- Если внутри цикла присутствует переменная с таким же именем, как и вне цикла, то к последней изнутри цикла обратиться нельзя.
- Цикл не позволяет производить итерацию по хэшам.
- HTML::Template не позволяет обращаться к методам объектов.
[править] Тэги
HTML::Template обладает следующим скромным набором тэгов.
[править] TMPL_VAR
<TMPL_VAR NAME="PARAMETER_NAME">
Самый простой тэг. Выводит значение переменной, значение которой вы присвоили через $template->param(PARAMETER_NAME => «VALUE»).
Позволяет делать HTML-экранирование, при помощи ESCAPE=HTML:
<input name=param type=text value="<TMPL_VAR ESCAPE=HTML NAME="PARAM">">
[править] TMPL_LOOP
<TMPL_LOOP NAME="LOOP_NAME"> ... </TMPL_LOOP>
Цикл по массиву. Переменная LOOP_NAME должна содержать массив хэшей.
<TMPL_LOOP> могут быть вложенными.
По умолчанию, переменные снаружи цикла не видны внутри него. Для изменения этого свойства следует использовать опцию global_vars в конструкторе объекта.
[править] TMPL_INCLUDE
<TMPL_INCLUDE NAME="filename.tmpl">
Вставляет на место этого тэга указанный шаблон.
[править] TMPL_IF
<TMPL_IF NAME="BOOL"> Some text that only gets displayed if BOOL is true! </TMPL_IF>
[править] TMPL_ELSE
<TMPL_IF BOOL> Some text that is included only if BOOL is true <TMPL_ELSE> Some text that is included only if BOOL is false </TMPL_IF>
[править] TMPL_UNLESS
<TMPL_UNLESS BOOL> Some text that is output only if BOOL is FALSE. <TMPL_ELSE> Some text that is output only if BOOL is TRUE. </TMPL_UNLESS>
Тэг, обратный по действию тэгу <TMPL_IF>