<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Template_Toolkit</id>
	<title>Template Toolkit - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Template_Toolkit"/>
	<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=Template_Toolkit&amp;action=history"/>
	<updated>2026-07-16T22:39:53Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://camokathomelab.servebeer.com/mediawiki/index.php?title=Template_Toolkit&amp;diff=14642&amp;oldid=prev</id>
		<title>imported&gt;Fuxx: -underscore in wikilink</title>
		<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=Template_Toolkit&amp;diff=14642&amp;oldid=prev"/>
		<updated>2022-12-23T09:15:33Z</updated>

		<summary type="html">&lt;p&gt;-underscore in wikilink&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Template Toolkit&amp;#039;&amp;#039;&amp;#039; — мощная «легковесная» [[perl]]-библиотека для работы с шаблонами, позволяющая разделять код, данные и представление.&lt;br /&gt;
&lt;br /&gt;
«Легковесная» в данном случае обозначает, что взаимодействие с пользователем, работа с [[база данных|базой данных]], вызов шаблонов на обработку и отображение производится через perl-скрипты, содержащие всю логику работы (см. [[бизнес-логика]]), а сами шаблоны отвечают преимущественно за дизайн/представление.&lt;br /&gt;
&lt;br /&gt;
Это — в отличие от «полновесных» систем разработки (frameworks), в которых Перл очень тесно интегрируется с [[HTML]], и предоставляющих дополнительную функциональность для работы с веб-страницами, например &amp;#039;&amp;#039;сессии&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Следует, однако, отметить, что с точки зрения скорости работы, [https://web.archive.org/web/20090520010857/http://ctpp.havoc.ru/template_benchmarks.html согласно результатам тестов], библиотека не является «легковесной» и заметно проигрывает другим распространенным [[шаблонизатор]]ам.&lt;br /&gt;
&lt;br /&gt;
== Возможности/преимущества/специфика ==&lt;br /&gt;
В Template Toolkit используется свой язык, обладающий богатым, но простым для изучения синтаксисом.&lt;br /&gt;
&lt;br /&gt;
Простой пример шаблона:&lt;br /&gt;
 &amp;amp;lt;html&amp;gt;&lt;br /&gt;
 &amp;amp;lt;head&amp;gt;&amp;amp;lt;title&amp;gt;[% title %]&amp;amp;lt;/title&amp;gt;&amp;amp;lt;/head&amp;gt;&lt;br /&gt;
 &amp;amp;lt;body&amp;gt;&lt;br /&gt;
   Вывод списка:&lt;br /&gt;
   &amp;amp;lt;ul&amp;gt;&lt;br /&gt;
   [% FOREACH i = items %]&lt;br /&gt;
     &amp;amp;lt;li&amp;gt;[% i %]&amp;amp;lt;/li&amp;gt;&lt;br /&gt;
   [% END %]&lt;br /&gt;
   &amp;amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И скрипт, вызывающий его:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# !/usr/bin/perl&lt;br /&gt;
use Template;&lt;br /&gt;
&lt;br /&gt;
my $tt2 = new Template({&lt;br /&gt;
    INCLUDE_PATH=&amp;gt;&amp;#039;/path/to/templates&amp;#039; #Путь к каталогу с шаблонами&lt;br /&gt;
});&lt;br /&gt;
my $vars={&lt;br /&gt;
    title=&amp;gt;&amp;#039;Заголовок страницы&amp;#039;,&lt;br /&gt;
    items=&amp;gt;[&amp;#039;Один&amp;#039;, &amp;#039;Два&amp;#039;, &amp;#039;Три&amp;#039;]&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Content-type: text/html\n\n&amp;quot;;&lt;br /&gt;
$tt2-&amp;gt;process(&amp;quot;page1.htm&amp;quot;, $vars);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
По умолчанию в качестве разделителей блоков кода используются &amp;#039;&amp;#039;&amp;#039;[%&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;%]&amp;#039;&amp;#039;&amp;#039;. Но можно использовать любую другую последовательность символов, например &amp;#039;&amp;#039;&amp;#039;&amp;lt;% %&amp;gt;&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;&amp;lt;? ?&amp;gt;&amp;#039;&amp;#039;&amp;#039; и так далее. Причём изменять последовательность можно в любое время прямо внутри шаблона.&lt;br /&gt;
&lt;br /&gt;
Ниже представлен список некоторых возможностей Template Toolkit:&lt;br /&gt;
* Позволяет без затруднений разрабатывать страницы сайта по любой схеме: сверху вниз, снаружи внутрь и изнутри наружу.&lt;br /&gt;
&lt;br /&gt;
* Использует унифицированный синтаксис для всех типов данных:&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;hash.key&amp;#039;&amp;#039;&amp;#039; — обращению к ключу хэша&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;array.1&amp;#039;&amp;#039;&amp;#039; — элемент массива с индексом 1&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;object.method&amp;#039;&amp;#039;&amp;#039; — вызов метода объекта&amp;lt;br /&amp;gt;&lt;br /&gt;
Таким образом, получается, что неважно, что содержится в переменной: строка, функция, блок или что-то другое — всё вызывается единообразно.&lt;br /&gt;
&lt;br /&gt;
* Для ускорения работы шаблоны при первой обработке компилируются в перл-скрипты, и, в зависимости от настроек, сохраняются на диск или в память. Благодаря этому скорость работы движка очень велика и близка к чистому Перлу.&lt;br /&gt;
&lt;br /&gt;
* Позволяет для нескольких шаблонов использовать общие данные: настройки, переменные, константы, функции, и так далее.&lt;br /&gt;
&lt;br /&gt;
* Развитая система написания плагинов и фильтров позволяет легко написать собственные плагины/фильтры, или использовать множество уже существующих (поставляются вместе с Template Toolkit).&lt;br /&gt;
&lt;br /&gt;
* Позволяет вставлять внутрь шаблонов «сырой» Перл.&lt;br /&gt;
* В качестве блоков могут выступать как отдельные файлы, так и блоки, определяемые внутри внешнего или текущего файла.&lt;br /&gt;
* Появившееся со второй версии нововведение — «виды» (views), позволяет создавать шаблоны с применением объектно-ориентированного подхода.&lt;br /&gt;
* Может обрабатывать [[XML]] файлы, преобразуя их в [[HTML]], и представляя, таким образом, альтернативу [[XSLT]].&lt;br /&gt;
* В поставку входят скрипты-утилиты, позволяющие из произвольного набора файлов-шаблонов сгенерировать требуемый набор HTML-страниц.&lt;br /&gt;
* Хорошая документация, которая многими признаётся «золотым стандартом» документации среди библиотек Перла.&lt;br /&gt;
&lt;br /&gt;
Полный список возможностей Template Toolkit очень велик. Более подробно с ними можно ознакомиться по документации, которую можно найти по ссылкам внизу страницы.&lt;br /&gt;
&lt;br /&gt;
== Недостатки ==&lt;br /&gt;
Из-за того, что в Перле присутствуют переменные разных типов, а в Template Toolkit все они вызываются одинаково, возникают неоднозначности.&lt;br /&gt;
&lt;br /&gt;
Есть особенности работы с объектами-хэшами, и объектами-массивами:&lt;br /&gt;
&lt;br /&gt;
При попытке прохода по объекту-массиву через FOREACH выяснится, что в списке будет присутствовать только один элемент — сам объект.&lt;br /&gt;
&lt;br /&gt;
А при обращения к элементу &amp;#039;&amp;#039;&amp;#039;arrayobj.$index&amp;#039;&amp;#039;&amp;#039;, где &amp;#039;&amp;#039;&amp;#039;index&amp;#039;&amp;#039;&amp;#039; — индекс требуемого элемента, Template Toolkit попытается вызвать метод с таким именем. А методов с именами 0, 7, 12 и т. д. в языках программирования, в общем-то, не бывает.&lt;br /&gt;
&lt;br /&gt;
Для решения этих проблем в код класса нужно добавить метод as_list() — именно его Template Tookit вызывает при использовании FOREACH.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub as_list { [@{$_[0]}] }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого кода состоит в том, что берётся сам объект, превращается в обычный массив, и сразу же преобразуется в ссылку на массив — то, что нужно для FOREACH.&lt;br /&gt;
&lt;br /&gt;
Как as_list() помогает при выборке конкретных элементов из объекта?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
aref = aref_object.as_list();&lt;br /&gt;
aref.0;&lt;br /&gt;
aref.1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проблемы вызывает присутствие в классе функции AUTOLOAD:&lt;br /&gt;
# она перехватывает все вызовы виртуальных методов Template Toolkit&lt;br /&gt;
# так как Template Toolkit пытается сначала найти метод объекта с указанным именем, и только при неудаче — найти одноимённый ключ хэша, становится понятно, что AUTOLOAD также перехватывает все вызовы к ключам хэша&lt;br /&gt;
&lt;br /&gt;
Вторую проблему можно решить так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub AUTOLOAD {&lt;br /&gt;
   my ($sub_name) = $AUTOLOAD=~/([^:]+)$/; #Найти имя запрашиваемого метода&lt;br /&gt;
   if (exists $_[0]{$sub_name}) { #Если у объекта существует ключ с именем  $sub_name,&lt;br /&gt;
      return $_[0]{$sub_name}      #то вернуть его&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Подсказки ==&lt;br /&gt;
Имеется массив aref, и переменная ix. Мы хотим вывести элемент массива по индексу, указанному в ix.&lt;br /&gt;
&lt;br /&gt;
Так будет неправильно:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
aref.ix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
В этом случае будет произведена попытка вызова метода ix.&lt;br /&gt;
&lt;br /&gt;
А так — правильно:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
aref.$ix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Знак доллара &amp;#039;&amp;#039;&amp;#039;$&amp;#039;&amp;#039;&amp;#039; используется для подстановки значения переменной в выражение.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
При том, что Template Tookit считается «легковесной» шаблонной библиотекой, развитый синтаксис и большой набор дополнительных возможностей обозначают уклон в сторону «тяжеловесов».&lt;br /&gt;
&lt;br /&gt;
Хотя вызов шаблона на обработку осуществляется из перл-скрипта, существует возможность встраивать команды Template Toolkit прямо в код обычных HTML-страниц, которые пользователи запрашивают напрямую. Для этого надо установить модуль Apache::Template и произвести небольшую настройку сервера Apache.&lt;br /&gt;
&lt;br /&gt;
== Авторы ==&lt;br /&gt;
Создатель библиотеки [http://www.wardley.org/ Andy Wardley]. Загрузить последнюю версию библиотеки (Template-Toolkit-N.NN.tar.gz) можно из [[CPAN]]. Ссылки на ресурсы см. ниже.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
=== Внешние ресурсы ===&lt;br /&gt;
* [http://www.template-toolkit.com/ Официальный сайт]&lt;br /&gt;
* [http://www.template-toolkit.ru/ Сайт на русском языке]&lt;br /&gt;
* [http://www.template-toolkit.com/download.html Страница скачки на официальном сайте]&lt;br /&gt;
* [http://cpan.org/modules/by-module/Template/ Раздел CPAN, где можно найти последнюю версию Template Toolkit]&lt;br /&gt;
* [http://github.com/claco/tt.net/tree/master Версия для C#]&lt;br /&gt;
* [https://hackage.haskell.org/package/template-toolkit Версия для Haskell]&lt;br /&gt;
* [https://web.archive.org/web/20111205021140/http://perleclipse.com/TTEditor/ Плагин для Eclipse]&lt;br /&gt;
&lt;br /&gt;
Разработчики, использующие [[Windows]], могут скачать архив всё-в-одном, содержащий [[Apache HTTP Server|Apache]] 2, [[Perl]] 5.x, [[mod perl]] 1.99, и множество полезных библиотек, не входящих в стандартную поставку языка Perl, среди которых есть Template Toolkit 2 и Apache::Template. Архив находится здесь: ftp://theoryx5.uwinnipeg.ca/pub/CPAN{{Недоступная ссылка|date=Май 2018 |bot=InternetArchiveBot }}.&lt;br /&gt;
&lt;br /&gt;
=== Библиотеки для работы с шаблонами в Perl ===&lt;br /&gt;
* Легковесные, [[Model-View-Controller|MVC]]&lt;br /&gt;
** Template Toolkit&lt;br /&gt;
** [[HTML::Template]]&lt;br /&gt;
** [[Text::Template]]&lt;br /&gt;
** [[CGI::FastTemplate]]&lt;br /&gt;
* Системы разработки приложений&lt;br /&gt;
** [[Embperl]]&lt;br /&gt;
** [[Apache::ASP]]&lt;br /&gt;
** [[HTML::Mason]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Модули Perl]]&lt;br /&gt;
[[Категория:Свободные библиотеки программ]]&lt;br /&gt;
[[Категория:Шаблонные системы]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Fuxx</name></author>
	</entry>
</feed>