Посмотрели как добавить свою функцию в Smarty, а теперь посмотрим как сделать склонение числительных smarty, так, чтобы можно было выводить фразу:

склонение числительных smarty

В корзине 1 товар(а)

В виде:

В корзине 4 товара

и

В корзине 12 товаров

Делаем склонение числительных smarty

Для этого возьмем уже готовую функцию для склонения числительных на PHP, и зарегистрируем её в Smarty, чтобы можно было делать склонение числительных smarty.

//Немного модифицируем первоначальную функцию, чтобы она работала в Smarty
function declOfNum($params)
{
    $number=$params['n'];
    $titles=$params['t'];
    $cases = array (2, 0, 1, 1, 1, 2);
    return $number." ".$titles[ ($number%100>4 && $number%100<20)? 2 : $cases[min($number%10, 5)] ];
}

//а теперь зарегистрируем в Smarty

$smarty->register_function("decl_of_num", "declOfNum");

Готово! Теперь будет работать склонение числительных smarty.
Вызывать будем вот так:

{$titles[0]='товар'}
{$titles[1]='товара'}
{$titles[2]='товаров'}
{decl_of_num n=$count_of_goods t=$titles}

Сначала мы создаем в Smarty массив возможных заголовков (для одного товара, для количества кратного двум, и для многих товаров), а потом просто передаем этот массив в нашу функцию и получаем результат.
Естественно в переменной $count_of_goods хранится количество (цифра) и вместо переменной может быть просто число или элемент массива (переменная объекта).

Сегодня мы рассмотрели на примере склонение числительных smarty, как можно использовать регистрацию пользовательских (собственных) функций в шаблонизаторе Smarty.