Template Toolkit

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

[ Пособия ] [ Руководство ] [ Модули ] [ Библиотеки ] [ Утилиты ] [ Вопросы ] [ Релиз ] [ Perl-ресурсы ]
 
Поиск
Template Toolkit | Модули | Template::Document

Template::Document

[ ◄ Template::Context ] [ Template::Exception ► ]
Объект скомпилированного шаблона.

Оглавление

ОБЗОР

Индекс ] [ Модули ] [ Наверх ]

    use Template::Document;
    $doc = Template::Document->new({
	BLOCK => sub { # some perl code; return $some_text },
	DEFBLOCKS => {
	    header => sub { # more perl code; return $some_text },
	    footer => sub { # blah blah blah; return $some_text },
	},
	METADATA => {
	    author  => 'Andy Wardley',
	    version => 3.14,
	}
    }) || die $Template::Document::ERROR;
    print $doc->process($context);

ОПИСАНИЕ

Индекс ] [ Модули ] [ Наверх ]

Этот модуль определяет объектный класс, экземпляры которого представляют скомпилированные шаблоны. Модуль Template::Parser создает экземпляр Template::Document инкапсулирующий шаблон в виде скомпилированного perl-кода.

Конструктор new() ожидает хеш, содержащий элементы BLOCK, DEFBLOCKS и METADATA. Элемент BLOCK должен содержать ссылку на функцию или текстовое представление perl-кода, как оно генерируется модулем Template::Parser, которое затем вычисляется в функцию с помощью eval(). Элемент DEFLOCKS должен ссылаться на хеш, содержащий добавочные именованные блоки BLOCK, которые могут быть определены в шаблоне. Ключи представляют из себя имена BLOCK, а значения должны быть ссылками на функции или строки perl-кода, как в главном элементе BLOCK. Элемент METADATA должен ссылаться на хеш метаданных, относящихся к документу.

У экземпляра объекта Template::Document можно вызвать метод process(), передав в качестве первого параметра ссылку на объект Template::Context. Это приведет к регистрации всех локальных определений блоков (DEFBLOCKS) в кэше BLOCKS контекста (через вызов visit()), чтобы позже они могли быть разрешены контекстом. Затем исполняется главная функция BLOCK, которой в качестве аргумента передается ссылка на контекст. Текст, возвращаемый функцией шаблона, затем возвращается методом process(), после вызова метода котекста leave(), который дает возможность очистить регистрацию ранее утсановленных именованных блоков BLOCK.

Метод AUTOLOAD предоставляет доступ к элементам METADATA документа. Модуль Template::Service устанавливает в хранилище (stash) ссылку на главный объект Template::Document как переменную 'template'. Это позволяет получить доступ к элементам метаданных из шаблонов, включая шаблоны PRE_PROCESS.

header:

    <html>
    <head>
    <title>[% template.title %]
    </head>
    ...

Объекты Template::Document обычно создает Template::Parser, но также можно создать их вручную или создать подклассы, чтобы получить собственные шаблонные компоненты.

МЕТОДЫ

Индекс ] [ Модули ] [ Наверх ]

new(\%config)

Конструктор, который принимает ссылку на хеш со структорой, подобной приведенной в примере:

    $doc = Template::Document->new({
	BLOCK => sub { # some perl code; return $some_text },
	DEFBLOCKS => {
	    header => sub { # more perl code; return $some_text },
	    footer => sub { # blah blah blah; return $some_text },
	},
	METADATA => {
	    author  => 'Andy Wardley',
	    version => 3.14,
	}
    }) || die $Template::Document::ERROR;

Элементы BLOCK и DEFBLOCKS могут быть представлены как ссылки на perl-функции или текстовые строки, содержащие определения perl-кода, как они генерируются модулем Template::Parser. Последние вычисляются в ссылки на функции с помощью eval().

Возвращает новый объект Template::Document или в случае ошибки undef. Чтобы получить соответствующее сообщение об ошибке можно использовать метод класса error() или проверить значение переменной пакета $ERROR.

process($context)

Главная обрабатывающая функция скомпилированного шаблона. В качестве первого параметра должна получить ссылку на объект Template::Context. Метод устанавливает все локальные определения блоков через вызов метода контекста visit(), вызывает собственную функцию шаблона, передавая в качестве параметра ссылку на контекст и затем вызывает метод контекста leave(), чтобы разрешить очистку.

    print $doc->process($context);

Возвращает текстовую строку, представляющую сгенерированный шаблоном вывод. Ошибки генерируются через die().

block()

Вовращает ссылку на главную функцию BLOCK.

blocks()

Возвращает ссылку на хеш функций именованных блоков DEFBLOCKS.

AUTOLOAD

Метод автозагрузки возвращает элементы метаданных METADATA.

    print $doc->author();

ФУНКЦИИ ПАКЕТА

Индекс ] [ Модули ] [ Наверх ]

write_perl_file(\%config)

Эта функция пакета предоставляется, чтобы обеспечить сохранение скомпилированных шаблонов. Если установлена опция COMPILE_EXT (определяющая расширение файлов для сохраняемых скомпилированных шаблонов), то модуль Template::Parser вызывает эту функцию перед вызовом конструктора new(). На этом этапе, парсер имеет представление шаблона в виде текстовых строк, содержащих perl-код. Можно записать его в файл, предварительно завернув в небольшую обертку, что позволит в последствие загрузить этот файл с помощью require() и скомпилировать код в Template::Document. Таким образом реализуется хранение скомпилированных шаблонов.

АВТОР

Индекс ] [ Модули ] [ Наверх ]

Энди Уардли (Andy Wardley <abw@andywardley.com>)

http://www.andywardley.com/

ВЕРСИЯ

Индекс ] [ Модули ] [ Наверх ]

2.74, поставляется в составе 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.

СМОТРИ ТАКЖЕ

Индекс ] [ Модули ] [ Наверх ]

Template, Template::Parser

[ ◄ Template::Context ] [ Template::Exception ► ]

[ Пособия ] [ Руководство ] [ Модули ] [ Библиотеки ] [ Утилиты ] [ Вопросы ] [ Релиз ] [ Perl-ресурсы ]

http://www.template-toolkit.ru/