Вышел Smarty 3
После многолетней разработки, наконец, вышел новый релиз популярного движка шаблонов для PHP – Smarty 3.0
Код Smarty 3 целиком переписан и ориентирован на поддержку PHP 5.
Новые возможности Smarty 3
Новый парсер
Новый парсер шаблонов и лексический анализатор позволяют существенно улучшить встроенный язык шаблонов.
Теперь можно использовать: математические вычисления в шаблоне, рекурсивные функции, сообщения об ошибках.
Объект "шаблон"
Теперь вы можете сделать объект шаблон и выполнить его.
Пример:
$tpl->assign('foo','bar');
$smarty->display($tpl); // or $tpl->display();
Data Objects
Переменные, назначенные в шаблон теперь можно управлять независимо, как объект Smarty_Data.
Пример:
$data->assign('foo','bar');
$smarty->display('my.tpl',$data);
$tpl = $smarty->createTemplate('my.tpl',$data);
Наследование шаблонов
Пример:
parent .tpl
<head>
<title>{block name=title}default title{/block}<title>
</head>
<body>
{block name=body}default body{/block}
</body>
</html>
child .tpl
{block name=title}My Child Title{/block}
{block name=body}My Child Body{/block}
Результат: $smarty->display('child.tpl');
<head>
<title>My Child Title<title>
</head>
<body>
My Child Body
</body>
</html>
Улучшенная обработка скобок {}
Раньше JavaScript код в шаблоне приходилось помещать в {literal}.
Теперь Smarty сам разбирается где описание шаблона, а где JavaScript
Пример:
// the following braces are ignored by Smarty
// since they are surrounded by whitespace
function foobar {
alert('foobar!');
}
// this one will need literal escapement
{literal}
function bazzy {alert('foobar!');}
{/literal}
</script>
Определение функции в шаблоне
Пример:
{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}
{* create an array to demonstrate *}
{$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' =>
['item3-3-1','item3-3-2']],'item4']}
{* run the array through the function *}
{menu data=$menu}
Результат:
* item1
* item2
* item3
o item3-1
o item3-2
o item3-3
+ item3-3-1
+ item3-3-2
* item4
Обратная совместимость
Что бы упростить пользователям переход на Smarty 3 разработчики позаботились что бы поддерживалась совместимость со Smarty 2.
