24 февраля 2016

Smarty - это компилирующий обработчик шаблонов для PHP. Говоря более четко, он предоставляет один из инструментов, которые позволяет добиться отделения прикладной логики и данных от представления. Это очень удобно в ситуациях, когда программист и верстальщик шаблона - различные люди.

Как закомментировать?
{* комментарий *}
Как экранировать код в котором встречаются {}
{ldelim} = {, {rdelim} = } либо
{literal}...{/literal}
Как посчитать количество элементов в массиве
{$group.items|@count}
Как создать внутреннюю переменную smarty
{assign var=tmp_var value="string value"}
Значение переменной по-умолчанию
{$my_var|default:"Default value"}
Как сделать чтобы smarty вычислил значение переменной при присвоении
{include file="`$evaluable_variable`/shell_header.inc"}
{include file="$cpp/shell_header.inc"}
{include file="$template/index.tpl"}
так не сработает - {include file="$prefixindex.tpl"}
{$include file=$prefix|concat:"index.tpl"}
Полезные строковые модификаторы
{$cart_content[index].cost|replace:'&':'&'}
{$mystring|substr:5:10}
{$mystring|substr:5}
Экранирование
{$articleTitle|escape}{$articleTitle|escape:'html'}    {* экранирует  & " ' < > *}
{$articleTitle|escape:'htmlall'} {* экранирует ВСЕ HTML-сущности *}
{$articleTitle|escape:'url'}
{$articleTitle|escape:'quotes'}
Текущая дата
{$smarty.now|date_format:"%d.%m.%Y %H:%M"}
Как организовать цикл for
for($i=1;$i<10;$i++)  
{section name=foo loop=9}   
{$smarty.section.foo.iteration}{/section}
Использование условий if
{if isset($name) && NOT empty($name)}
    ...
{elseif $name == $foo}
    ...
{/if} 
{if is_array($foo) && count($foo) > 0)    
    {* do a foreach loop *}
{/if}
Передача параметров вызываемому шаблону
{include file='navigator.tpl' params=$params}
В шаблоне navigator.tpl будет доступна переменная $params с переданным значением.
Включение шаблона можно перенаправить в переменную
{include file='partials/nav.tpl' params=$params assign=nav} 
{$nav}
Текущая дата
{$smarty.now|date_format:"%d.%m.%Y %H:%M"}
Как организовать цикл for
for($i=1;$i<10;$i++)  
{section name=foo loop=9}   
    {$smarty.section.foo.iteration}
{/section}
Как в цикле foreach определить первый и последний элемент
{foreach name=foo from=$array}
    {if $smarty.foreach.foo.first} этот первый {/if} 
    {$smarty.foreach.foo|@debug_print_var}  
    {if $smarty.foreach.foo.last}  этот последний {/if}
{/foreach}

Управление кэшированием вложеных шаблонов

Не кэшировать шаблон
{include 'sub_template.tpl' nocache}
Кэшировать на 500 секунд
{include 'sub_template.tpl' cache_lifetime=500}
Принудительное кэширование
{include 'sub_template.tpl' caching}
{include 'sub_template.tpl' caching cache_id="individualCacheID"}
Вычисление
{math equation="(( x + y ) / z )" x=2 y=10 z=2}
{math equation="x + y" x=4.4444 y=5.0000 format="%.2f"}
{math equation="height * width / division"
      height=$row_height     
      width=$row_width      
      division=$div}
Рандомное число
{math equation='rand(10,100)'}
Дополнительные вспомогательные операции
%   mod   $a mod $b   modulus   %is [not] div by       
$a is not div by 4  divisible by  $a % $b == 0is [not] even       
$a is not even  [not] an even number (unary)  $a % 2 == 0is [not] even by      
$a is not even by $b  grouping level [not] even   ($a / $b) % 2 == 0is [not] odd      
$a is not odd   [not] an odd number (unary)   $a % 2 != 0is [not] odd by       
$a is not odd by $b   [not] an odd grouping   ($a / $b) % 2 != 0 
#модуль, определение четности, нечетности, кратности
Теги: smarty