Smarty 3 Final Smarty 3.0.7

Smarty 3 Final. Что нового?

Совсем недавно вышла финальная версия популярного шаблонизатора Smarty 3. В данный момент последняя версия шаблонизатора 3.0.7 Нововведения этой версии:

  • Переписан под PHP5, с PHP4 больше не работает (требует PHP 5.2)
  • Использует свой загрузчик классов
  • Собственные настоящие парсер и лексер для шаблонов, что позволило ввести такие новшества, как сложная математика в шаблонах, сообщения об ошибках с точностью до строки и вложенные вызовы шаблонных функций
  • Доступны объекты шаблонов 
    $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

Теперь самое важное — для работы текущих шаблонов на новой версии шаблонизатора необходимо внести в них некоторые изменения. А именно:

  • везде, где используется 
    {include file='file_name.tpl'}
    имя файла нужно брать в кавычках, по сути это относится к любым параметрам
  • не использовать апострофы `, т.е. было 
    {include file='paging.tpl' aPaging=`$aPaging`}
    стало 
    {include file='paging.tpl' aPaging=$aPaging}
    для математических выражений 
    {section name=closelist1  loop=`$nesting-$cmtlevel+1`}
    меняем их на скобки 
    {section name=closelist1  loop=($nesting-$cmtlevel+1)}
  • после открывающей фигурной скобки { и перед закрывающей } не должно быть пробельных символов, иначе они не считаются за конструкции Smarty
  • в условиях логические операторы необходимо отделять пробелами, было 
    {if $aParams[0]=='favourites'and$aParams[1]!='comments'}
    стало 
    {if $aParams[0]=='favourites' and $aParams[1]!='comments'}

Эти правила должны помочь достаточно легко адаптировать ваши шаблоны под текущую версию шаблонизатора.

Тройка получилась довольно легкой. Основной файл со всеми классами занимает всего 27Кб. Большая часть функционала, включая даже служебные теги вроде foreach вынесена в плагины и подгружается, если это требуется для компиляции шаблона. Однако следует иметь ввиду, что при самой компиляции будут загружены как минимум плагины smarty_internal_templatelexer + smarty_internal_templateparser.php, а это уже ~200Кб. Впрочем, на тяжело нагруженном сайте компилировать шаблоны, в общем-то, в нормальном режиме работы не требуется, поэтому 30Кб кода приятно радуют.

Home   Download

test