Динамическая надпись на сайте с правильной формой множественного числа

Задача

Добавить на сайт надпись с числом, чтобы в ней правильно формировались формы единственного и множественного числа для зависимых слов.

Примеры
В нашем магазине ... товар/товара/товаров.
До Нового года остался/осталось/осталось ... день/дня/дней.

Вариант решения

В HTML-шаблоне темы дизайна или информационной страницы добавьте объявление функции Smarty с именем «plural» для выбора формы единственного и множественного числа для русского языка.

{function name='plural'}{if $n % 100 == 1}{$s = $string[0]}{elseif $n % 100 > 0 && $n % 100 < 5}{$s = $string[1]}{else}{if $n % 100 < 21}{$s = $string[2]}{else}{if $n % 10 == 1}{$s = $string[0]}{elseif $n % 10 > 0 && $n % 10 < 5}{$s = $string[1]}{else}{$s = $string[2]}{/if}{/if}{/if}{if strpos($s, '%d') === false}{$format = "%d `$s`"}{else}{$format = $s}{/if}{sprintf($format, $n)}{/function}

После объявления функции добавьте её вызов с указанием числа (в параметре n) и разных форм слова или части фразы (в параметре string).

Примеры
{* если в строке нет фрагмента %d, то число автоматически добавляется перед словом: "12 товаров"*}
В нашем каталоге {plural n=$wa->shop->productsCount() string=['товар', 'товара', 'товаров']}.

{* если в строке есть фрагмент %d, то число вставляется вместо %d: "осталось 3 дня"*}
{$interval = date_diff(date_create(), date_create('2018-12-31'))}
До Нового года {plural string=['остался %d день', 'осталось %d дня', 'осталось %d дней'] n=$interval->days}.

0 комментариев

    Добавить комментарий

    Чтобы добавить комментарий, зарегистрируйтесь или войдите