Template Toolkit(русская редакция) |
|
||
|
|||
Синтаксис |
|
ОПИСАНИЕ |
[ Индекс ] [ Руководство ] [ Наверх ] |
Раздел описывает синтаксис, структуру и семантику директив и языка общего представления Template Toolkit. Стиль теговПо умолчанию директивы шаблона заключены между последовательностями символов '[%' и '%]'. Например, [% PROCESS header %]
<h1>Hello World!</h1>
<a href="[% page.next %]"><img src="[% icon.next %].gif"></a>
[% PROCESS footer %]
Вы можете изменить символы тегов с помощью опций конфигурации START_TAG, END_TAG и TAG_STYLE. Также можно использовать внутри шаблона директиву TAGS для определния стиля тегов для текущего файла шаблона. Также вы можете установить опцию INTERPOLATE, чтобы разрешить использовать непосредственно внутри шаблонов обычные (с префиксом '$') ссылки на переменные. # INTERPOLATE => 0
<td>[% name %]</td> <td>[% email %]</td>
# INTERPOLATE => 1
<td>$name</td> <td>$email</td>
Директивы можно включать в любом месте текста и можно разбивать на несколько строк. Дополнительные пробельные символы внутри директивы в общем случае несущественны. [% INCLUDE header
title = 'Hello World'
bgcol = '#ffffff'
%]
[% INCLUDE menu align='right'%]
Name: [% name %] ([%id%])
КомментарииСимвол '#' используется для обозначения комментария внутри директивы. Если вставить символ сразу за открывающим тегом вся директива целиком будет проигнорирована парсером. [%# вся директива целиком игнорируется
вне зависимости от того на сколько строк она разбита
%]
В любом другом месте этот символ указывает, что оставщаяся часть строки является комментарием. [% # это комментарий
theta = 20 # so is this
rho = 30 # <aol>me too!</aol>
%]
Удаление переводов строкиВы можете добавить '-' или '+' в открывающем или завершающем теге директивы, чтобы управлять удалением переводов строки до и после директивы. Подробности смотрите в описании опций PRE_CHOMP и POST_CHOMP. [% BLOCK foo -%] # удаляет замыкающий перевод строки
This is block foo
[%- END %] # удаляет предшествующий перевод строки
Неявные директивы: GET и SETПростейшие директивы GET и SET получают и устанавливают значения переменных соответственно. Ключевые слова GET и SET фактически являются опциональными так как парсер достаточно умен, чтобы распознать их без явного указания (однако обратите внимание на приведенное ниже предупреждение об использовании обратной нотации). Таким образом: [% SET foo = 10 %]
[% GET foo %]
вы чаще встретите в таком виде: [% foo = 10 %]
[% foo %]
Также вы можете использовать простейшие логические выражения в неявной директиве GET: [% title or template.title or 'Default Title' %] [% mode == 'graphics' ? "Graphics Mode Enabled" : "Text Mode" %] Все остальные директивы должны начинаться с ключевого слова, записанного в ВЕРХНЕМ РЕГИСТРЕ (исключением является использование опции ANYCASE, смотри далее). Все директивы записываются в ВЕРХНЕМ РЕГИСТРЕ для лучшей визуализации и для того чтобы отличать их от переменных с тем же именем, записанным в другом регистре. Например, совершенно законно использование переменной с именем 'stop' которая полностью отличается от директивы STOP. [% stop = 'Clackett Lane Bus Depot' %] The bus will next stop at [% stop %] # переменная [% STOP %] # директива Блочные директивыТакие директивы как FOREACH, WHILE, BLOCK, FILTER и т.д. обозначают начало блока, который может содержать текст или другие директивы, и который завершается соответствующей директивой END. Вложенность блоков не ограничена. Директивы IF, UNLESS, ELSIF и ELSE также определяют блоки и могут использоваться друг с другом по обычным правилам. [% FOREACH item = [ 'foo' 'bar' 'baz' ] %]
* Item: [% item %]
[% END %]
[% BLOCK footer %]
Copyright 2000 [% me %]
[% INCLUDE company/logo %]
[% END %]
[% IF foo %]
[% FOREACH thing = foo.things %]
[% thing %]
[% END %]
[% ELSIF bar %]
[% INCLUDE barinfo %]
[% ELSE %]
do nothing...
[% END %]
Блочные директивы также могут использоваться в удобной обратной нотации. [% INCLUDE userinfo FOREACH user = userlist %] [% INCLUDE debugtxt msg="file: $error.info"
IF debugging %]
[% "Danger Will Robinson" IF atrisk %] Сравните с: [% FOREACH user = userlist %]
[% INCLUDE userinfo %]
[% END %]
[% IF debugging %]
[% INCLUDE debugtxt msg="file: $error.info" %]
[% END %]
[% IF atrisk %]
Danger Will Robinson
[% END %]
Захват вывода блокаВывод директивы может быть захвачен простым присваиванием директивы перменной. [% headtext = PROCESS header title="Hello World" %] [% people = PROCESS userinfo FOREACH user = userlist %] В связке с директивой BLOCK это можно использовать для определения больших блоков текста или другого контента. [% poem = BLOCK %]
The boy stood on the burning deck,
His fleece was white as snow.
A rolling stone gathers no moss,
And Keith is sure to follow.
[% END %]
Важное предупреждение относительно использования этого синтаксиса в связке с обратной нотацией. Следующая директива ведет себя не так как можно предполагать: [% var = 'value' IF some_condition %] В данном случае, директива интерпретируется как (для ясности добавлены пробелы) [% var = IF some_condition %]
value
[% END %]
а не как [% IF some_condition %]
[% var = 'value' %]
[% END %]
Переменной присваивается вывод блока IF, который вернет 'value', если условие выполняется и ничего, если условие ложно. Другими словами, следующая директива всегда будет приводить к очистке переменной 'var'. [% var = 'value' IF 0 %] Для того чтобы добиться ожидаемого поведения, директиву следует записать так: [% SET var = 'value' IF some_condition %] Цепочки фильтровНесколько директивы FILTER могут быть выстроены в цепочку. Они вызываются согласно определенному порядку и выходной поток одного передается на входной поток следующего. [% PROCESS somefile FILTER truncate(100) FILTER html %] В качестве замены FILTER можно использовать символ '|' (pipe). [% PROCESS somefile | truncate(100) | html %] Блоки директивНесколько директив, разделенных символом ';', могут быть заключены между одной парой тегов. Исключение составляет директива TAGS, которая всегда должна быть указана отдельно. [% IF title;
INCLUDE header;
ELSE;
INCLUDE other/header title="Some Other Title";
END
%]
Сравните с: [% IF title %]
[% INCLUDE header %]
[% ELSE %]
[% INCLUDE other/header title="Some Other Title" %]
[% END %]
|
АВТОР |
[ Индекс ] [ Руководство ] [ Наверх ] |
Энди Уардли (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. |