Template Toolkit(русская редакция) |
|
||
|
|||
Плагины |
|
ОПИСАНИЕ |
[ Индекс ] [ Руководство ] [ Наверх ] |
Этот раздел содержит перечень стандартных плагинов, которые можно использовать для расширения текущей функциональности Template Toolkit. Эти плагины поставляются в составе Template Toolkit, но могут потребовать установки дополнительных модулей с CPAN. |
ПЛАГИНЫ TEMPLATE TOOLKIT |
[ Индекс ] [ Руководство ] [ Наверх ] |
Следующие модули-плагины поставляются в составе Template Toolkit. Некоторые из плагинов являются интерфейсами к внешним модулям (описанным ниже), которые необходимо загрузить с CPAN и установить перед использованием соответсвующих плагинов. AutoformatПлагин Autoformat - интерфейс к модулю Демиана Конвея (Damian Conway) Text::Autoformat, который предоставляет широкие возможности по переносу и форматированию текста. Детальное описание смотрите в Template::Plugin::Autoformat и Text::Autoformat. [% USE autoformat(left=10, right=20) %]
[% autoformat(mytext) %] # вызов функции autoformat
[% mytext FILTER autoformat %] # использование фильтра autoformat
Модуль Text::Autoformat доступен на CPAN: http://www.cpan.org/modules/by-module/Text/ CGIПлагин CGI - обертка вокруг модуля CGI.pm Линкольна Стейна (Lincoln Stein's <lstein@genome.wi.mit.edu>). Плагин содержится в составе Template Toolkit, а сам модуль CGI поставляется в составе последних версий Perl, а также доступен на CPAN. [% USE CGI %]
[% CGI.param('param_name') %]
[% CGI.start_form %]
[% CGI.popup_menu( Name => 'color',
Values => [ 'Green', 'Brown' ] ) %]
[% CGI.end_form %]
DatafileПредоставляет интерфейс к данным, хранящимся в текстовом файле в простом формате с разделителями. Первая строка файла определяет названия полей, которые должны быть разделены любой последовательностью небуквенных символов. Следующие строки определяют данные, использующие те же разделители, что используются в первой строке. Пустые строки и комментарии (строки начинающиеся с '#') игнорируются. Более подробно смотрите Template::Plugin::Datafile. /tmp/mydata: # определение имен полей
id : email : name : tel
# данные
fred : fred@here.com : Fred Smith : 555-1234
bill : bill@here.com : Bill White : 555-5678
Пример: [% USE userlist = datafile('/tmp/mydata') %]
[% FOREACH user = userlist %]
[% user.name %] ([% user.id %])
[% END %]
DateПлагин Date предоставляет простой способ форматирования строк, содержащих даты и время с использованием POSIX функции strftime(). Более подробно смотрите Template::Plugin::Date и POSIX. [% USE date %]
[% date.format %] # текущее время/дата
File last modified: [% date.format(template.modtime) %] DirectoryПлагин Directory предоставляет простой интерфейс для работы с каталогами и файлами внутри них. Более подробно смотрите Template::Plugin::Directory. [% USE dir = Directory('/tmp') %]
[% FOREACH file = dir.files %]
# все обычные файлы в каталоге
[% END %]
[% FOREACH file = dir.dirs %]
# все подкаталоги
[% END %]
DBIНаписанный Симоном Мэттьюсом (Simon Matthews <sam@knowledgepool.com>) плагин DBI предоставляет вашим шаблонам всю мощь модуля-интерфейса к базам данных DBI Тима Банса (Tim Bunce <Tim.Bunce@ig.co.uk>). Более подробно смотрите Template::Plugin::DBI и DBI. [% USE DBI('dbi:driver:database', 'user', 'pass') %]
[% FOREACH user = DBI.query( 'SELECT * FROM users' ) %]
[% user.id %] [% user.name %]
[% END %]
DBI и соответсвующие модули DBD доступны на CPAN: http://www.cpan.org/modules/by-module/DBI/ DumperПлагин Dumper предоставляет интерфейс к модулю Data::Dumper. Более подробно смотрите Template::Plugin::Dumper и Data::Dumper. [% USE dumper(indent=0, pad="<br>") %]
[% dumper.dump(myvar, yourvar) %]
FileПлагин File предоставляет общюю абстракцию для файлов и может быть использован для получения информации о файлах внутри файловой системы. Более подробно смотрите Template::Plugin::File. [% USE File('/tmp/foo.html') %]
[% File.name %] # foo.html
[% File.dir %] # /tmp
[% File.mtime %] # время изменения (modification time)
FilterЭтот модуль реализует базовый класс плагина, из которого можно легко создать собственные модули, которые определяют и устанавливают новые фильтры. package MyOrg::Template::Plugin::MyFilter; use Template::Plugin::Filter;
use base qw( Template::Plugin::Filter );
sub filter {
my ($self, $text) = @_;
# ...обработка $text... return $text;
}
# теперь загружаем его...
[% USE MyFilter %]
# ...и используем возвращенный объект в качестве фильтра
[% FILTER $MyFilter %]
...
[% END %]
Более подробно смотрите Template::Plugin::Filter. FormatПлагин Format предоставляет простой способ форматирования текста в формате printf(). Более подробно смотрите Template::Plugin::Format. [% USE bold = format('<b>%s</b>') %]
[% bold('Hello') %]
GD::Image, GD::Polygon, GD::ConstantsЭти плагины предоставляют доступ к графической библиотеке GD через интерфейс GD.pm Линкольна Стейна (Lincoln D. Stein). Этот плагин позволяет генерировать PNG, JPEG и другие графические форматы. [% FILTER null;
USE im = GD.Image(100,100);
# назначить цвета
black = im.colorAllocate(0, 0, 0);
red = im.colorAllocate(255, 0, 0);
blue = im.colorAllocate(0, 0, 255);
# нарисовать голубой овал
im.arc(50,50,95,75,0,360,blue);
# залить его красным
im.fill(50,50,red);
# вывести картинку в формате PNG
im.png | stdout(1);
END;
-%]
Более подробно смотрите Template::Plugin::GD::Image. GD::Text, GD::Text::Align, GD::Text::WrapЭти плагины предоставляют доступ к модулям Мартина Вербрюггена (Martien Verbruggen) GD::Text, GD::Text::Align и GD::Text::Wrap. Эти плагины позволяют разместить, выровнять и перенести текст в картинках GD. [% FILTER null;
USE gd = GD.Image(200,400);
USE gdc = GD.Constants;
black = gd.colorAllocate(0, 0, 0);
green = gd.colorAllocate(0, 255, 0);
txt = "This is some long text. " | repeat(10);
USE wrapbox = GD.Text.Wrap(gd,
line_space => 4,
color => green,
text => txt,
);
wrapbox.set_font(gdc.gdMediumBoldFont);
wrapbox.set(align => 'center', width => 160);
wrapbox.draw(20, 20);
gd.png | stdout(1);
END;
-%]
Более подробно смотрите Template::Plugin::GD::Text, Template::Plugin::GD::Text::Alignи Template::Plugin::GD::Text::Wrap. GD::Graph::lines, GD::Graph::bars, GD::Graph::points, GD::Graph::linespoints, GD::Graph::area, GD::Graph::mixed, GD::Graph::pieЭти плагины предоставляют доступ к модулю Мартина Вербрюггена (Martien Verbruggen) GD::Graph, который позволяет создавать графики, диаграммы и схемы. Эти плагины позволяют выводить графики, диаграммы и схемы в PNG, JPEG и других графических форматах. [% FILTER null;
data = [
["1st","2nd","3rd","4th","5th","6th"],
[ 4, 2, 3, 4, 3, 3.5]
];
USE my_graph = GD.Graph.pie(250, 200);
my_graph.set(
title => 'A Pie Chart',
label => 'Label',
axislabelclr => 'black',
pie_height => 36,
transparent => 0,
);
my_graph.plot(data).png | stdout(1);
END;
-%]
Более подробно смотрите Template::Plugin::GD::Graph::lines, Template::Plugin::GD::Graph::bars, Template::Plugin::GD::Graph::points, Template::Plugin::GD::Graph::linespoints, Template::Plugin::GD::Graph::area, Template::Plugin::GD::Graph::mixed, Template::Plugin::GD::Graph::pie и GD::Graph. GD::Graph::bars3d, GD::Graph::lines3d, GD::Graph::pie3dЭти плагины предоставляют доступ к модулю GD::Graph3d Джереми Уадсака (Jeremy Wadsack). Это позволяет создавать 3-мерные гистограммы и линейные диаграммы. [% FILTER null;
data = [
["1st","2nd","3rd","4th","5th","6th","7th", "8th", "9th"],
[ 1, 2, 5, 6, 3, 1.5, 1, 3, 4],
];
USE my_graph = GD.Graph.bars3d();
my_graph.set(
x_label => 'X Label',
y_label => 'Y label',
title => 'A 3d Bar Chart',
y_max_value => 8,
y_tick_number => 8,
y_label_skip => 2,
# shadows
bar_spacing => 8,
shadow_depth => 4,
shadowclr => 'dred',
transparent => 0,
my_graph.plot(data).png | stdout(1);
END;
-%]
Более подробно смотрите Template::Plugin::GD::Graph::lines3d, Template::Plugin::GD::Graph::bars3d и Template::Plugin::GD::Graph::pie3d. HTMLОчень новый и простой плагин HTML предоставляет несколько полезных методов генерации HTML. Возможно в будущем он будет расширен или интегрирован в более крупный проект по генерации HTML элементов в общем виде (как это недавно обсуждалось в списке рассылки mod_perl). [% USE HTML %]
[% HTML.escape("if (a < b && c > d) ..." %]
[% HTML.attributes(border => 1, cellpadding => 2) %]
[% HTML.element(table => { border => 1, cellpadding => 2 }) %]
Более подробно смотрите Template::Plugin::HTML. IteratorПлагин Iterator предоставляет возможность создать объект Template::Iterator для использования в цикле обработки массива. Переменная-итератор с именем 'loop' создается автоматически директивой FOREACH. Этот плагин позволяет создать итератор явно с указанным именем или с именем по умолчанию 'iterator'. Более подробно смотрите Template::Plugin::Iterator. [% USE iterator(list, args) %] [% FOREACH item = iterator %]
[% '<ul>' IF iterator.first %]
<li>[% item %]
[% '</ul>' IF iterator.last %]
[% END %]
PodПлагин предоставляет интерфейс к модулю Pod::POM, который разбирает POD-документацию во внутреннюю объектную модель, которая затем может быть представлена с помощью Template Toolkit. [% USE Pod(podfile) %] [% FOREACH head1 = Pod.head1;
FOREACH head2 = head1/head2;
...
END;
END
%]
StringПлагин String реализует объектно-ориентированный интерфейс для манипулирования строками. Более подробно смотрите Template::Plugin::String. [% USE String 'Hello' %]
[% String.append(' World') %]
[% msg = String.new('Another string') %]
[% msg.replace('string', 'text') %]
The string "[% msg %]" is [% msg.length %] characters long. TableПлагин Table позволяет сформатировать список данных в виртуальную таблицу с фиксированным числом строк или колонок, с частичным заполнением. Более подробно смотрите Template::Plugin::Table. [% USE table(list, rows=10, overlap=1) %] [% FOREACH item = table.col(3) %]
[% item %]
[% END %]
URLПлагин URL предоставляет простой способ построения URL из базовой части и переменного числа параметров. Более подробно смотрите Template::Plugin::URL. [% USE mycgi = url('/cgi-bin/bar.pl', debug=1) %]
[% mycgi %]
# ==> /cgi/bin/bar.pl?debug=1
[% mycgi(mode='submit') %]
# ==> /cgi/bin/bar.pl?mode=submit&debug=1
WrapПлагин Wrap использует модуль Дэвида Мью Шарноффа (David Muir Sharnoff <muir@idiom.com>) Text::Wrap (при поддержке Тима Пирса (Tim Pierce) и многих-многих других) для простого форматирования параграфов. Более подробно смотрите Template::Plugin::Wrap и Text::Wrap. [% USE wrap %]
[% wrap(mytext, 40, '* ', ' ') %] # используем функцию wrap
[% mytext FILTER wrap(40) -%] # или фильтр wrap
Модуль Text::Wrap доступен на CPAN: http://www.cpan.org/modules/by-module/Text/ XML::DOMПлагин XML::DOM предоставляет доступ к объектной модели документа XML через модуль Кларка Купера (Clark Cooper <cooper@sch.ge.com>) и Энно Дерксена (Enno Derksen <enno@att.com>) XML::DOM. Более подробно смотрите Template::Plugin::XML::DOM и XML::DOM. [% USE dom = XML.DOM %]
[% doc = dom.parse(filename) %]
[% FOREACH node = doc.getElementsByTagName('CODEBASE') %]
* [% node.getAttribute('href') %]
[% END %]
Для работы плагина требуется установка модуля XML::DOM, доступного на CPAN: http://www.cpan.org/modules/by-module/XML/ XML::RSSПлагин XML::RSS это простой интерфейс к модулю Джонатана Эйзензопфа (Jonathan Eisenzopf <eisen@pobox.com>) XML::RSS. Файл RSS (Rich Site Summary) обычно используется для хранения коротких заголовков, описывающих различные ссылки на сайте. Этот плагин позволяет разбирать RSS-файлы и соответсвующим образом форматировать содержимое с использованием шаблонов. Более подробно смотрите Template::Plugin::XML::RSS и XML::RSS. [% USE news = XML.RSS(filename) %]
[% FOREACH item = news.items %]
<a href="[% item.link %]">[% item.title %]</a>
[% END %]
Модуль XML::RSS доступен на CPAN: http://www.cpan.org/modules/by-module/XML/ XML::SimpleЭтот плагин реализует интерфейс к модулю XML::Simple. [% USE xml = XML.Simple(xml_file_or_text) %] [% xml.head.title %] Более подробно смотрите Template::Plugin::XML::Simple. XML::StyleЭтот плагин определяет фильтр для выполнения простых преобразований XML на основе таблиц стилей. [% USE xmlstyle
table = {
attributes = {
border = 0
cellpadding = 4
cellspacing = 1
}
}
%]
[% FILTER xmlstyle %]
<table>
<tr>
<td>Foo</td> <td>Bar</td> <td>Baz</td>
</tr>
</table>
[% END %]
Более подробно смотрите Template::Plugin::XML::Style. XML::XPathПлагин XML::XPath предоставляет интерфейс к модулю Матта Серджинта (Matt Sergeant <matt@sergeant.org>) XML::XPath. Более подробно смотрите Template::Plugin::XML::XPath и XML::XPath. [% USE xpath = XML.XPath(xmlfile) %]
[% FOREACH page = xpath.findnodes('/html/body/page') %]
[% page.getAttribute('title') %]
[% END %]
Для работы плагина требуется установка модуля XML::XPath, доступного на CPAN: http://www.cpan.org/modules/by-module/XML/ |
АВТОР |
[ Индекс ] [ Руководство ] [ Наверх ] |
Энди Уардли (Andy Wardley <abw@andywardley.com>) |
ВЕРСИЯ |
[ Индекс ] [ Руководство ] [ Наверх ] |
Template Toolkit версия 2.14, дата релиза - 4 октября 2004. |
АВТОРСКИЕ ПРАВА |
[ Индекс ] [ Руководство ] [ Наверх ] |
Copyright (C) 1996-2004 Andy Wardley. All Rights Reserved. Copyright (C) 1998-2002 Canon Research Centre Europe Ltd. Этот модуль является свободно-распространяемым программным обеспечением; вы можете распространять и/или модифицировать его на тех же условиях, что и Perl. |