Smarty

В smarty предусмотрено комментирование кода?

{\* комментарий \*}

Как экранировать код в котором встречаются {}

{ldelim} = {, {rdelim} = }

либо

{literal}...{/literal}

Как посчитать количество элементов в массиве

{$group.items|@count}

Как создать внутреннюю переменную smarty

{assign var=tmp\_var value="string value"}

Значение переменной по-умолчанию

{$my\_var|default:"Default value"}

Как сделать чтобы смарти вычислил значение переменной при присвоении

{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}

Как в цикле 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}

Использование условий 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 с переданным значением.

Использование захватов (capture)

{capture name=capMe}

I am html

{/capture}

{if $some\_expression\_is\_true}

{$smarty.capture.capMe}

{else}

{$smarty.capture.capMe}

{/if}

Смарти умеет вычислять!

{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}

Случайное число

(random)

{math equation='rand(10,100)'}

Дополнительные вспомогательные операции

%   mod   $a mod $b   modulus  %

is [not] div by       $a is not div by 4 divisible by  $a % $b == 0

is [not] even       $a is not even [not] an even number (unary)  $a % 2 == 0

is [not] even by      $a is not even by $b grouping level [not] even   ($a / $b) % 2 == 0

is [not] odd      $a is not odd [not] an odd number (unary)   $a % 2 != 0

is [not] odd by       $a is not odd by $b [not] an odd grouping   ($a / $b) % 2 != 0

#модуль, определение четности, нечетности, кратности

Переменные смарти

{$smarty.server.SERVER\_NAME}

{$smarty.template} текущий шаблон

{$smarty.server.SCRIPT\_NAME} путь до скрипта (относительно server\_root)

{$smarty.get.page} - REQUEST\_URI

То есть из smarty мы можем обратиться к массиву $\_SERVER и $\_GET.
Например, определим, находимся ли мы сейчас на главной странице

{if $smarty.server.REQUEST\_URI == "/"}кажется это главная{/if}

Отладка в smarty

Значение переменной

{$foo|@debug\_print\_var}

Консоль отладки, показывает все переданные данные скриптом в smarty

{debug}

Объекты (классы) в smarty

// создаем объект класса MyObject

class MyObject {

function dummy($params, &$smarty) {

return 'method!';

}

}

$myobj = new MyObject;

// регистрируем объект по ссылке

$smarty->register\_object('foobar',$myobj);

// ограничиваем доступ к методам

$smarty->register\_object('foobar',$myobj,array('meth1','meth2','prop1'));

// или так, если без ограничений

$smarty->register\_object('foobar',$myobj,null,false);

// Используем by\_ref для объектов

$smarty->assign\_by\_ref('myobj', $myobj);

$smarty->display('index.tpl');

?>

{\* доступ к методу, передача параметра \*}

{foobar->meth1 p1='foo' p2=$bar}

{\* можем поймать вывод метода \*}

{foobar->meth1 p1='foo' p2=$bar assign='output'}

Метод вернул {$output}

{\* доступ к объекту, назначенному через assign \*}

{$myobj->meth1('foo',$bar)}