HTML::Template

Материал из Циклопедии
Перейти к навигации Перейти к поиску

HTML::Template — небольшая по объёму Perl-библиотека для работы с шаблонами, позволяющая разделять код, данные и представление.

Возможности. Преимущества. Специфика[править]

В HTML::Template используется свой мини-язык, по написанию схожий с HTML-тегами.

Пример шаблона: <source lang="html4strict"> <html> <head><title> <TMPL_VAR NAME="title"> </title></head> <body>

 Вывод списка:
    <TMPL_LOOP NAME="items">
  • <TMPL_VAR NAME="item">
  • </TMPL_LOOP>

</body> </html> </source>

И вызывающий его скрипт: <source lang="perl">

  1. !/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(); </source>

  • Может кэшировать шаблоны в память, общую память (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">">

Позволяет делать URL-экранирование ESCAPE=URL, обрабатывать строки, которые впоследствии будут строками кода JavaScript ESCAPE=JS. Позволяет также устанавливать значение переменной по умолчанию DEFAULT='SOME VALUE'.

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>