Web Analytics
Privacy Policy Cookie Policy Terms and Conditions Template Toolkit — Википедия

Template Toolkit

Материал из Википедии — свободной энциклопедии

Содержание

[править] Template Toolkit

Template Toolkit — наиболее мощная из «легковесных» перл-библиотека для работы с шаблонами, позволяющая разделять код, данные и представление.

«Легковесная» в данном случае обозначает, что взаимодействие с пользователем, работа с базой данных, вызов шаблонов на обработку и отображение производится через перл-скрипты, содержащие всю логику работы (см. бизнес-логика), а сами шаблоны отвечают преимущественно за дизайн/представление.

Это — в отличие от «полновесных» систем разработки (frameworks), в которых Перл очень тесно интегрируется с HTML, и предоставляющих дополнительную функциональность для работы с веб-страницами, например сессии.

[править] Возможности/преимущества/специфика

В Template Toolkit используется свой язык, обладающий богатым, но простым для изучения синтаксисом.

Простой пример шаблона:

<html>
<head><title>[% title %]</title></head>
<body>
  Вывод списка:
  <ul>
  [% FOREACH i = items %]
    <li>[% i %]</li>
  [% END %]
  </ul>
</body>
</html>

И скрипт, вызывающий его:

#!/usr/bin/perl

use Template;

my $tt2 = new Template({
   INCLUDE_PATH=>'/path/to/templates' #Путь к каталогу с шаблонами
});

my $vars={
   title=>'Заголовок страницы',
   items=>['Один', 'Два', 'Три']
};

print "Content-type: text/html\n\n";
$tt2->process("page1.htm", $vars);

По умолчанию в качестве разделителей блоков кода используются [% и %]. Но можно использовать любую другую последовательность символов, например <% %>, <? ?> и так далее. Причём изменять последовательность можно в любое время прямо внутри шаблона.

Ниже представлен список некоторых возможностей Template Toolkit:

  • Позволяет без затруднений разрабатывать страницы сайта по любой схеме: сверху вниз, снаружи внутрь и изнутри наружу.
  • Использует унифицированный синтаксис для всех типов данных:

hash.key — обращению к ключу хэша
array.1 — элемент массива с индексом 1
object.method — вызов метода объекта
Таким образом, получается, что неважно, что содержится в переменной: строка, функция, блок или что-то другое — всё вызывается единообразно.

  • Для ускорения работы шаблоны при первой обработке компилируются в перл-скрипты, и, в зависимости от настроек, сохраняются на диск или в память. Благодаря этому скорость работы движка очень велика и близка к чистому Перлу.
  • Позволяет для нескольких шаблонов использовать общие данные: настройки, переменные, константы, функции, и так далее.
  • Развитая система написания плагинов и фильтров позволяет легко написать собственные плагины/фильтры, или использовать множество уже существующих (поставляются вместе с Template Toolkit).
  • Позволяет вставлять внутрь шаблонов «сырой» Перл.
  • В качестве блоков могут выступать как отдельные файлы, так и блоки, определяемые внутри внешнего или текущего файла.
  • Появившееся со второй версии нововведение — «виды» (views), позволяет создавать шаблоны с применением объектно-ориентированного подхода.
  • Может обрабатывать XML файлы, преобразуя их в HTML, и представляя, таким образом, альтернативу XSLT.
  • В поставку входят скрипты-утилиты, позволяющие из произвольного набора файлов-шаблонов сгенерировать требуемый набор HTML-страниц.
  • Хорошая документация, которая многими признаётся «золотым стандартом» документации среди библиотек Перла.

Полный список возможностей Template Toolkit очень велик. Более подробно с ними можно ознакомиться по документации, которую можно найти по ссылкам внизу страницы.

[править] Недостатки

Из-за того, что в Перле присутствуют переменные разных типов, а в Template Toolkit все они вызываются одинаково, возникают неоднозначности.

Есть особенности работы с объектами-хэшами, и объектами-массивами:

При попытке прохода по объекту-массиву через FOREACH выяснится, что в списке будет присутствовать только один элемент – сам объект.

А при обращения к элементу arrayobj.$index, где index — индекс требуемого элемента, Template Toolkit попытается вызвать метод с таким именем. А методов с именами 0, 7, 12 и т. д. в языках программирования, в общем-то, не бывает.

Для решения этих проблем в код класса нужно добавить метод as_list() – именно его Template Tookit вызывает при использовании FOREACH.

sub as_list { [@{$_[0]}] }

Смысл этого кода состоит в том, что берётся сам объект, превращается в обычный массив, и сразу же преобразуется в ссылку на массив – то, что нужно для FOREACH.

Как as_list() помогает при выборке конкретных элементов из объекта?

aref = aref_object.as_list();
aref.0;
aref.1;

Проблемы вызывает присутствие в классе функции AUTOLOAD:

  1. она перехватывает все вызовы виртуальных методов Template Toolkit
  2. так как Template Toolkit пытается сначала найти метод объекта с указанным именем, и только при неудаче – найти одноимённый ключ хэша, становится понятно, что AUTOLOAD также перехватывает все вызовы к ключам хэша

Вторую проблему можно решить так:

sub  AUTOLOAD {
   my ($sub_name) = $AUTOLOAD=~/([^:]+)$/; #Найти имя запрашиваемого метода
   if (exists $_[0]{$sub_name}) { #Если у объекта существует ключ с именем  $sub_name,
      return $_[0]{$sub_name}      #то вернуть его
   }
}

[править] Подсказки

Имеется массив aref, и переменная ix. Мы хотим вывести элемент массива по индексу, указанному в ix.

Так будет неправильно:

aref.ix

В этом случае будет произведена попытка вызова метода ix.

А так – правильно:

aref.$ix

Знак доллара $ используется для подстановки значения переменной в выражение.

[править] Примечания

При том, что Template Tookit считается «легковесной» шаблонной библиотекой, развитый синтаксис и большой набор дополнительных возможностей обозначают уклон в сторону «тяжеловесов».

Хотя вызов шаблона на обработку осуществляется из перл-скрипта, существует возможность встраивать команды Template Toolkit прямо в код обычных HTML-страниц, которые пользователи запрашивают напрямую. Для этого надо установить модуль Apache::Template и произвести небольшую настройку сервера Apache.

[править] Авторы

Создатель библиотеки Andy Wardley. Загрузить последнюю версию библиотеки (Template-Toolkit-N.NN.tar.gz) можно на CPAN. Ссылки на ресурсы см. ниже.

[править] Ссылки

[править] Внешние ресурсы

Разработчики, использующие Windows, могут скачать архив всё-в-одном, содержащий Apache 2, Perl 5.x, mod_perl 1.99, и множество полезных библиотек, не входящих в стандартную поставку языка Перл, среди которых есть Template Toolkit 2 и Apache::Template. Архив находится здесь: ftp://theoryx5.uwinnipeg.ca/pub/other/

[править] Библиотеки для работы с шаблонами в Перле

  • Легковесные, MVC
  • Системы разработки приложений
    • Embperl
    • Apache::ASP
    • HTML::Mason
 
THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu