12 апреля 2018

Для этого возьмем уже готовую функцию для склонения числительных на 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}