Template wrapper
- 1 year ago
- 0
- 0
Template Toolkit — мощная «легковесная» perl -библиотека для работы с шаблонами, позволяющая разделять код, данные и представление.
«Легковесная» в данном случае обозначает, что взаимодействие с пользователем, работа с базой данных , вызов шаблонов на обработку и отображение производится через perl-скрипты, содержащие всю логику работы (см. бизнес-логика ), а сами шаблоны отвечают преимущественно за дизайн/представление.
Это — в отличие от «полновесных» систем разработки (frameworks), в которых Перл очень тесно интегрируется с HTML , и предоставляющих дополнительную функциональность для работы с веб-страницами, например сессии .
Следует, однако, отметить, что с точки зрения скорости работы, , библиотека не является «легковесной» и заметно проигрывает другим распространенным шаблонизаторам .
В Template Toolkit используется свой язык, обладающий богатым, но простым для изучения синтаксисом.
Простой пример шаблона:
<html> <head><title>[% title %]</title></head> <body> Вывод списка: <ul> [% FOREACH i = items %] <li>[% i %]</li> [% END %] </ul> </body> </html>
И скрипт, вызывающий его:
# !/usr/bin/perl
use Template;
my $tt2 = new Template({
INCLUDE_PATH=>'/path/to/templates' #Путь к каталогу с шаблонами
});
my $vars={
title=>'Заголовок страницы',
items=>['Один', 'Два', 'Три']
};
print "Content-type: text/html\n\n";
$tt2->process("page1.htm", $vars);
По умолчанию в качестве разделителей блоков кода используются [% и %] . Но можно использовать любую другую последовательность символов, например <% %> , <? ?> и так далее. Причём изменять последовательность можно в любое время прямо внутри шаблона.
Ниже представлен список некоторых возможностей Template Toolkit:
hash.key
— обращению к ключу хэша
array.1
— элемент массива с индексом 1
object.method
— вызов метода объекта
Таким образом, получается, что неважно, что содержится в переменной: строка, функция, блок или что-то другое — всё вызывается единообразно.
Полный список возможностей Template Toolkit очень велик. Более подробно с ними можно ознакомиться по документации, которую можно найти по ссылкам внизу страницы.
Из-за того, что в Перле присутствуют переменные разных типов, а в Template Toolkit все они вызываются одинаково, возникают неоднозначности.
Есть особенности работы с объектами-хэшами, и объектами-массивами:
При попытке прохода по объекту-массиву через FOREACH выяснится, что в списке будет присутствовать только один элемент — сам объект.
А при обращения к элементу arrayobj.$index , где index — индекс требуемого элемента, Template Toolkit попытается вызвать метод с таким именем. А методов с именами 0, 7, 12 и т. д. в языках программирования, в общем-то, не бывает.
Для решения этих проблем в код класса нужно добавить метод as_list() — именно его Template Tookit вызывает при использовании FOREACH.
sub as_list { [@{$_[0]}] }
Смысл этого кода состоит в том, что берётся сам объект, превращается в обычный массив, и сразу же преобразуется в ссылку на массив — то, что нужно для FOREACH.
Как as_list() помогает при выборке конкретных элементов из объекта?
aref = aref_object.as_list();
aref.0;
aref.1;
Проблемы вызывает присутствие в классе функции AUTOLOAD:
Вторую проблему можно решить так:
sub AUTOLOAD {
my ($sub_name) = $AUTOLOAD=~/([^:]+)$/; #Найти имя запрашиваемого метода
if (exists $_[0]{$sub_name}) { #Если у объекта существует ключ с именем $sub_name,
return $_[0]{$sub_name} #то вернуть его
}
}
Имеется массив aref, и переменная ix. Мы хотим вывести элемент массива по индексу, указанному в ix.
Так будет неправильно:
aref.ix
В этом случае будет произведена попытка вызова метода ix.
А так — правильно:
aref.$ix
Знак доллара $ используется для подстановки значения переменной в выражение.
При том, что Template Tookit считается «легковесной» шаблонной библиотекой, развитый синтаксис и большой набор дополнительных возможностей обозначают уклон в сторону «тяжеловесов».
Хотя вызов шаблона на обработку осуществляется из перл-скрипта, существует возможность встраивать команды Template Toolkit прямо в код обычных HTML-страниц, которые пользователи запрашивают напрямую. Для этого надо установить модуль Apache::Template и произвести небольшую настройку сервера Apache.
Создатель библиотеки . Загрузить последнюю версию библиотеки (Template-Toolkit-N.NN.tar.gz) можно из CPAN . Ссылки на ресурсы см. ниже.
Разработчики, использующие Windows , могут скачать архив всё-в-одном, содержащий Apache 2, Perl 5.x, mod perl 1.99, и множество полезных библиотек, не входящих в стандартную поставку языка Perl, среди которых есть Template Toolkit 2 и Apache::Template. Архив находится здесь: (недоступная ссылка) .