Template Toolkit(русская редакция) |
|
||
|
|||
Часто задаваемые вопросы |
ОПИСАНИЕ |
[ Индекс ] [ Наверх ] |
Раздел содержит список часто задаваемых вопросов по использованию Template Toolkit. Более точно, пока что довольно небольшой раздел, в котором планируется разместить FAQ. |
Язык Template Toolkit |
[ Индекс ] [ Наверх ] |
Почему [% a = b IF c %] работает не как ожидается?Потому что парсер интерпретирует это следующим образом: [% a = (b IF c) %] Вместо этой используйте следующую запись: [% SET a = b IF c %] Я использую TT для вывода TT шаблона. Есть ли хороший способ для квотирования [% и %]?Можно сделать так: [% stag = "[\%" etag = "%\]" %] затем: [% stag; 'hello'; etag %] Или так: [% TAGS [- -] %] [- INCLUDE foo -] # директива [% INCLUDE foo %] # не директива, обычный текст, пропускается парсером Как осуществить циклический перебор хеша?Это описано в разделе руководства Template::Manual::VMethods. Список всех ключей хеша можно получить с помощью виртуального метода 'keys'. После этого можно циклически обойти хеш, используя каждый из ключей для получения соответствующего значения. [% FOREACH key = product.keys %]
[% key %] => [% product.$key %]
[% END %]
|
Плагины |
[ Индекс ] [ Наверх ] |
Как заставить плагин Table выводить данные не сверху вниз, а слева направо?Нужно вывести данные построчно: Steve Karen Jeff
Brooklyn Nantucket Fairfax
NY MA VA
[% USE table(data, rows=3) %]
Затем выполняем цикл по колонкам: [% FOREACH column = table.cols %] И, наконец, выводим каждый элемент колонки построчно: [% FOREACH item = column %]
<td>[% item %]</td>
[% END %]
Доступ к cookiesДжефф Боз (Jeff Boes <jboes@nexcerpt.com>) спрашивает: Существует ли простой способ получить доступ к
cookies из шаблонов?
Джонас Лильегрен (Jonas Liljegren) отвечает: [% USE CGI %]
<p>Значение ключика [% CGI.cookie('cookie_name') | html %]
|
Расширения Template Toolkit |
[ Индекс ] [ Наверх ] |
Можно ли запрашивать шаблоны из базы данных?Коротко: да, Крис Нандор (Chris Nandor) сделал это для Slash. Вам нужен производный класс Template::Provider. Более подробный ответ ищите в архивах списка рассылки. Можно ли запрашивать шаблоны через http?
Для того чтобы правильно выполнить эту задачу вам нужно создать
производный от Template::Provider класс Template::Provider::HTTP
и использовать опцию конфигурации PREFIX_MAP, чтобы связать префикс
в имени шаблона 'http' с соответсвующим поставщиком (вы можете поискать
дополнительную информацию о PREFIX_MAP в файле use Template::Provider::HTTP; my $file = Template::Provider( INCLUDE_PATH => [...] );
my $http = Template::Provider::HTTP->new(...);
my $tt2 = Template->new({
LOAD_TEMPLATES => [ $file, $http ],
PREFIX_MAP => {
file => '0', # file:foo.html
http => '1', # http:foo.html
default => '0', # foo.html => file:foo.html
}
});
Теперь шаблон, указанный следующим образом: [% INCLUDE foo %] будет предоставлен поставщиком 'file' (по умолчанию). В противном случае, можно явно указать префикс: [% INCLUDE file:foo.html %]
[% INCLUDE http:foo.html %]
[% INCLUDE http://www.xyz.com/tt2/header.tt2 %]
Аналогичный принцип можно использовать при создании поставщика шаблонов DBI. Например: [% INCLUDE dbi:foo.html %] Но, увы, и поставщика DBI как части Template Toolkit у нас пока нет. В списке рассылки был разговор о попытках разработки поставщиков DBI и/или HTTP, но пока дальше обсуждения дело не сдвинулось... В настоящий момент сообщение Крейга (Craig) в списке рассылки содержит ряд полезных указаний, как этого достичь с использованием существующих модулей: To: Adam Theo <adamtheo@theoretic.com>
From: Craig Barratt <craig@arraycomm.com>
Date: Fri, 18 May 2001 17:06:59 -0700
> i was wondering if there is anyway to fetch a file using http:// or
> ftp:// and include that?
Here's one way. Set the LOAD_PERL option:
use Template;
my $template = Template->new({
LOAD_PERL => 1
});
$template->process("example.tt", { stdout => *STDOUT })
|| die $template->error();
and then use LWP::UserAgent and HTTP::Request:
[%
USE ua = LWP.UserAgent;
ua.proxy("http", "http://your_proxy/");
USE req = HTTP.Request("GET", "http://www.cpan.org");
ua.request(req).content;
-%]
For FTP use Net::FTP:
[%
USE ftp = Net.FTP("ftp.cpan.org");
x = ftp.login("anonymous", "me@here.there");
x = ftp.cwd("/");
x = ftp.get("welcome.msg", stdout);
x = ftp.quit;
-%]
Normally ftp.get would write the file into the current directory.
Instead we pass stdout as a second argument so that it is written
to stdout. We set stdout to STDOUT in the variables we pass to
process.
Craig
|
Разное |
[ Индекс ] [ Наверх ] |
Каким образом сконфигурировать переменные для каждого отдельного шаблона?Один из простых способов - определить один шаблон PRE_PROCESS, который подгружает другие файлы конфигурации в зависимости от значений определенных переменных или других условий. Например, я обычно включаю настройки следующим образом: PRE_PROCESS => 'config/main' config/main: [% DEFAULT style = 'text'
section = template.section or 'home';
PROCESS config/site
+ config/urls
+ config/macros
+ "config/style/$style"
+ "config/section/$section"
+ ...
%]
Это позволяет мне контролировать с помощью установки единственной переменной 'style', какой файл конфигурации использовать для установки стиля (цвета, пути к картинкам и т.п.). Например: config/style/basic: [% style = {
name = style # сохраним существующую переменную 'style' как 'style.name'
# определяем различные переменные стиля....
col = {
back => '#ffffff'
text => '#000000'
# ... и т.д. ...
}
logo = {
# ... и т.д. ...
}
# ... и т.д. ...
}
%]
В каждом шаблоне можно объявить, в каком разделе он находится, через директиву META: [% META
title = 'General Information'
section = 'info'
%]
... Это позволяет управлять тем, конфигурационный файл какой секции будет загружен для установки различных переменных, определяющих заголовок секции, меню и т.п. config/section/info: [% section = {
name = section # сохраним переменную 'section' как 'section.name'
title = 'Information'
menu = [ ... ]
# ... и т.д. ...
}
%]
Это иллюстрация основного принципа, но вы можете расширить его для реализации любой необходимой вам инициализации шаблонов. |
АВТОР |
[ Индекс ] [ Наверх ] |
Энди Уардли (Andy Wardley <abw@andywardley.com>) |
ВЕРСИЯ |
[ Индекс ] [ Наверх ] |
2.70, поставляется в составе 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. |