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. |