Совсем недавно вышла финальная версия популярного шаблонизатора Smarty 3. Нововведения этой версии:
— Переписан под PHP5, с PHP4 больше не работает (требует PHP 5.1)
— Использует свой загрузчик классов
— Собственные настоящие парсер и лексер для шаблонов, что позволило ввести такие новшества, как сложная математика в шаблонах, сообщения об ошибках с точностью до строки и вложенные вызовы шаблонных функций
— Доступны объекты шаблонов
— Объекты данных:
— Поддержка потоков PHP
В этих случаях вначале будет произведен поиск зарегистрированного ресурса foo для загрузки шаблона. Если такового не обнаружится, Smarty проверит наличие потока foo://
— Наследование шаблонов
— Автоматическое игнорирование фигурных скобок "{", "}", если они окружены пробелами (больше не требуется окружать Javascript {literal}{/literal} или использовать другой маркер тега).
— Фильтр для вывода всех переменных шаблона по умолчанию
— Функции в шаблонах
— Управление кешированием на уровне элементов
— Почти полная совместимость со Smarty 2.
— Использование тега {php} по умолчанию отключено и считается устаревшим.
— Smarty теперь по умолчанию полагает, что кодировка шаблонов UTF-8.
Тройка получилась довольно легкой. Основной файл со всеми классами занимает всего 27Кб. Большая часть функционала, включая даже служебные теги вроде foreach вынесена в плагины и подгружается, если это требуется для компиляции шаблона. Однако следует иметь ввиду, что при самой компиляции будут загружены как минимум плагины smarty_internal_templatelexer + smarty_internal_templateparser.php, а это уже ~200Кб. Впрочем, на тяжело нагруженном сайте компилировать шаблоны, в общем-то, в нормальном режиме работы не требуется, поэтому 30Кб кода приятно радуют.
— Переписан под PHP5, с PHP4 больше не работает (требует PHP 5.1)
— Использует свой загрузчик классов
— Собственные настоящие парсер и лексер для шаблонов, что позволило ввести такие новшества, как сложная математика в шаблонах, сообщения об ошибках с точностью до строки и вложенные вызовы шаблонных функций
— Доступны объекты шаблонов
$tpl = $smarty->createTemplate('my.tpl');
$tpl->assign('foo','bar');
$smarty->display($tpl); // or $tpl->display();
— Объекты данных:
$data = new Smarty_Data;
$data->assign('foo','bar');
$smarty->display('my.tpl',$data);
$tpl = $smarty->createTemplate('my.tpl',$data);
— Поддержка потоков PHP
$smarty->display('foo:bar.tpl');
{include file="foo:bar.tpl"}
В этих случаях вначале будет произведен поиск зарегистрированного ресурса foo для загрузки шаблона. Если такового не обнаружится, Smarty проверит наличие потока foo://
— Наследование шаблонов
parent .tpl <html> <head> <title>{block name=title}default title{/block}<title> </head> <body> {block name=body}default body{/block} </body> </html> child .tpl {extends file="parent.tpl"} {block name=title}My Child Title{/block} {block name=body}My Child Body{/block} Результат $smarty->display('child.tpl'); <html> <head> <title>My Child Title<title> </head> <body> My Child Body </body> </html>
— Автоматическое игнорирование фигурных скобок "{", "}", если они окружены пробелами (больше не требуется окружать Javascript {literal}{/literal} или использовать другой маркер тега).
— Фильтр для вывода всех переменных шаблона по умолчанию
$smarty->registerFilter('variable','htmlspecialchars');
— Функции в шаблонах
{* определяем функцию *} {function name=menu level=0} <ul class="level{$level}"> {foreach $data as $entry} {if is_array($entry)} <li>{$entry@key}</li> {menu data=$entry level=$level+1} {else} <li>{$entry}</li> {/if} {/foreach} </ul> {/function} {* Создаем массив *} {$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' => ['item3-3-1','item3-3-2']],'item4']} {* прогоняем его через функцию *} {menu data=$menu} <pre> Вывод * item1 * item2 * item3 o item3-1 o item3-2 o item3-3 + item3-3-1 + item3-3-2 * item4
— Управление кешированием на уровне элементов
{$foo nocache} - не кешировать содержимое этой переменной {include file="foo.tpl" nocache} - не кешировать содержимое включаемого файла
— Почти полная совместимость со Smarty 2.
— Использование тега {php} по умолчанию отключено и считается устаревшим.
— Smarty теперь по умолчанию полагает, что кодировка шаблонов UTF-8.
Тройка получилась довольно легкой. Основной файл со всеми классами занимает всего 27Кб. Большая часть функционала, включая даже служебные теги вроде foreach вынесена в плагины и подгружается, если это требуется для компиляции шаблона. Однако следует иметь ввиду, что при самой компиляции будут загружены как минимум плагины smarty_internal_templatelexer + smarty_internal_templateparser.php, а это уже ~200Кб. Впрочем, на тяжело нагруженном сайте компилировать шаблоны, в общем-то, в нормальном режиме работы не требуется, поэтому 30Кб кода приятно радуют.