Публикация — в значительной мере — перевод официальной документации CGI::Application::Plugin::TT.
Все примеры — оригинальные, разработанные специально для данного документа и проверенные на работоспособность.
Оглавление
CGI::Application поддерживает работу с шаблонами Template Toolkit с помощью CGI::Application::Plugin::TT .
Методы
tt_process
tt_process() — это «обертка» вокруг стандартного метода process() от Template Toolkit. Использование tt_process() похоже на использование process(). Методу tt_process можно передать до двух параметров. Первый — это имя вызываемого шаблона, второй — ссылка на хэш с передаваемыми в шаблон данными. Оба параметра являются не обязательными.
Если не указано имя шаблона, имя будет сгенерировано автоматически, с помощью функции $self->tt_template_name .
|
1 2 3 4 5 6 |
... my $tt_params = {}; $tt_params->{'block'} = 'show_result'; return $self->tt_process('template.tt', $tt_params); ... |
tt_process() возвращает скалярную ссылку на готовый к выводу пользователю код шаблона.
Пример:
|
1 2 3 4 |
... my $scalar_link = $self->tt_process('template.tt', $tt_params); print ${$scalar_link}; ... |
Вывод:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<html> <head> <meta http-equiv="Content-Type" content=" text/html; charset=windows-1251" /> <title>Нумерология...</title> <style type="text/css"> body {font-family: Verdana, Arial Cyr, Arial, Helvetica; font-weight: normal; font-size: 9pt;} </style> </head> <body bgcolor="#ffffff"> <center> ... |
Фактически, полученный код не обязательно отправлять на вывод пользователю. Можно сохранить данные в файл, или разместить и отправить в электронном письме.
tt_config
Метод tt_config() позволяет задать некоторые параметры работы плагина CGI::Application::Plugin::TT и Template Toolkit. Рекомендуется вызывать метод tt_config() до того, как будут выполнены первые обращения к методам tt_process() и tt_obj(). Если хотите получить ошибку — сделайте наоборот.
TEMPLATE_OPTIONS
TEMPLATE_OPTIONS позволяет определить параметры для объекта Template. В списке можно указывать все классические конфигурационные опции Template Toolkit.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package App2; ... sub setup { my $self = shift; $self->start_mode('on_start'); $self->tt_config( TEMPLATE_OPTIONS => { INCLUDE_PATH => '/home/aninatalie.ru/templates', }, ); $self->run_modes( on_start => \&on_start, AUTOLOAD => sub { return 'Запрошенной страницы не существует' } ); } ... |
TEMPLATE_NAME_GENERATOR
TEMPLATE_NAME_GENERATOR позволяет указать ссылку на функцию, которая будет генерировать имя файла шаблона. Данная функция будет выполняться, если метод tt_process() будет вызван без указания имени шаблона.
Если специальная функция не назначена, а tt_process() все-таки вызван без параметров — по-умолчанию будет сгенерировано имя шаблона на основе имен текущего модуля и метода.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
package App2; ... sub setup { my $self = shift; $self->mode_param('step'); $self->start_mode('on_start'); $self->tt_config( TEMPLATE_NAME_GENERATOR => \&my_own_generator, ); $self->run_modes( on_start => \&on_start, AUTOLOAD => sub { return 'Запрошенной страницы не существует' } ); } sub my_own_generator { my $self = shift; return 'error.tt', } sub on_start { my $self = shift; return $self->tt_process(); } |
tt_obj
Метод tt_obj() возвращает ссылку на основной объект Template Toolkit. Используется, в основном, в процессе отладки приложения.
tt_params
Метод tt_params() определяет список параметров, которые будут
передаваться в каждый вызываемый шаблон.
Как правило, при вызове метода tt_process(), ему передается ссылка
на хэш с параметрами. Параметры, определенные с помощью tt_params() будут добавляться в этот хэш.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
sub setup { my $self = shift; $self->mode_param('step'); $self->start_mode('on_start'); $self->tt_params(block => 'secret_page'); $self->run_modes( on_start => \&on_start, AUTOLOAD => sub { return 'Запрошенной страницы не существует' } ); } sub on_start { my $self = shift; my $q = $self->query(); my $tt_params = {}; # к значениям данного хэша будут добавлены # значения, заданные в tt_params() ... return $self->tt_process('template2.tt', $tt_params); } |
Если один и тот же параметр определен дважды — преимуществом будет пользоваться
параметр, который входит в хэш, передаваемый непосредственно tt_process().
Пример:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
sub setup { my $self = shift; ... $self->tt_params(block => 'show_result'); } sub start { my $self = shift; my $tt_params = { block => 'show_form', }; return $self->tt_process('template.tt', $tt_params); } |
В результате выполнения данного блока кода, в шаблоне будет использоваться параметр block со значением: «show_form».
tt_clear_params
Метод tt_clear_params() удалит все сохранившиеся до текущего времени параметры, установленные методом tt_params().
|
1 |
$self->tt_clear_params; |
tt_pre_process
Метод tt_pre_process() действует аналогично методу cgiapp_prerun(). tt_pre_process() вызывается и отрабатывается непосредственно перед началом обработки шаблона.
Выполнение tt_pre_process() будет запущено автоматически, а на вход будут переданы те же параметры, которые передаются методу tt_process(). При желании, можно внести последние изменения в список передаваемых шаблону параметров.
|
1 2 3 4 5 6 |
sub tt_pre_process { my ($self, $file, $vars) = @_; $vars->{block}='show_result'; print STDERR "start template process: $file \n"; return; } |
tt_post_process
Метод tt_post_process() аналогичен методу cgiapp_postrun(). Вызывается автоматически после завершения обработки шаблона, но до отправления результата клиенту. На вход принимает скалярную ссылку на обработанный шаблон — готовый к выводу html-код.
|
1 2 3 4 5 6 7 |
sub tt_post_process { my ($self, $htmlref) = @_; print $htmlref; return; } |
tt_template_name
Метод генерирует название шаблона на основе имени вызывающих его класса и метода.
Например:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package App; use base 'CGI::Application'; use CGI::Application::Plugin::TT; sub setup { my $self = shift; $self->run_modes( on_start => 'start', ... ); } ... sub start { my $self = shift; my $template_name = $self->tt_template_name(); return $self->tt_process($template_name); } |
Результат: Для вывода будет запрошен шаблон App/start.tmpl .
tt_template_name() позволяет формировать и использовать определенную иерархию шаблонов, зависимую от структуры самого приложения.
Можно заставить tt_template_name() сгенерировать название шаблона на основе не вызывающего метода, а вышестоящего по уровню. На сколько уровней выше — задается с помощью
числа в качестве параметра.
Пример:
|
1 |
my $template_name = $self->tt_template_name(1); |
Результат в файле error.log:
|
1 2 3 |
[Wed Jun 9 15:56:55 2010] [error] Error executing run mode 'on_start': file error - App/(eval).tmpl: not found at /home/aninatalie/aninatalie.ru/cgi-bin/app.cgi line 8\n |
tt_template_name() вызывается автоматически, если при вызове метода tt_process() не было указано имя шаблона.
tt_include_path
Метод tt_include_path() позволяет указать путь к месторасположению шаблонов. Причем, на этапе, когда объект TT уже существует. Обычно для указания пути используют INCLUDE_PATH.
Вызов tt_include_path() внесет изменения в INCLUDE_PATH, что можно использовать во всех последующих вызовах объекта TT.
|
1 2 |
my $dir = '/home/aninatalie/aninatalie.ru/templates'; $self->tt_include_path( [$dir] ); |
Полезные ссылки
http://search.cpan.org/~ceeshek/CGI-Application-Plugin-TT-1.04/lib/CGI/Application/Plugin/TT.pm
Примеры работ на CGI::Application
http://search.cpan.org/~abw/Template-Toolkit-2.22/lib/Template.pm
Спасибо, очень просто и доступно