Вышел Smarty 3

После многолетней разработки, наконец, вышел новый релиз популярного движка шаблонов для PHP – Smarty 3.0
Код Smarty 3 целиком переписан и ориентирован на поддержку PHP 5.
Новые возможности Smarty 3
Новый парсер
Новый парсер шаблонов и лексический анализатор позволяют существенно улучшить встроенный язык шаблонов.
Теперь можно использовать: математические вычисления в шаблоне, рекурсивные функции, сообщения об ошибках.

Объект "шаблон"
Теперь вы можете сделать объект шаблон и выполнить его.
Пример:

$tpl = $smarty->createTemplate('my.tpl');
$tpl->assign('foo','bar');
$smarty->display($tpl); // or $tpl->display();

Data Objects
Переменные, назначенные в шаблон теперь можно управлять независимо, как объект Smarty_Data.
Пример:

$data = new Smarty_Data;
$data->assign('foo','bar');
$smarty->display('my.tpl',$data);
$tpl = $smarty->createTemplate('my.tpl',$data);

Наследование шаблонов
Пример:
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}.
Теперь Smarty сам разбирается где описание шаблона, а где JavaScript
Пример:

<script>
   // 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>

Определение функции в шаблоне
Пример:

{* define the function *}
{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.

Ваша оценка: Пусто Средняя: 4.5 (2 голосов)