Template Toolkit: Руководство: Плагины

Template Toolkit

(русская редакция)

[ Пособия ] [ Руководство ] [ Модули ] [ Библиотеки ] [ Утилиты ] [ Вопросы ] [ Релиз ] [ Perl-ресурсы ] Форум ]
 
Поиск
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>)

http://www.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.