Посмотрели как добавить свою функцию в 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.