Зачем это нужно?
При разработке интернет-магазина на Webasyst часто требуется динамическое склонение слов в зависимости от количества товаров (например: «1 товар», «2 товара», «5 товаров»).
Ручная проверка условий для каждого случая усложняет разработку. Решение — функция Smarty, которая автоматически выбирает нужную форму слова. В статье разберем её реализацию и применение.
Готовая функция для склонения слов
{function plural n=0 words=["один", "два", "пять"]}
{if intval($n / 10) % 10 != 1 && 1 <= $n % 10 && $n % 10 <= 4}
{if $n % 10 == 1}
{$words[0]}
{else}
{$words[1]}
{/if}
{else}
{$words[2]}
{/if}
{/function}
Как это работает:
intval($n / 10) % 10 != 1— исключает числа 11-19 (например, 11 товаров, 13 товаров), где всегда используется третья форма.$n % 10— определяет последнюю цифру числа:- Если 1 — выбирает
words[0](1 товар), - Если 2-4 — выбирает
words[1](2 товара), - В остальных случаях —
words[2](5 товаров).
- Если 1 — выбирает
Пример использования
{$reviews_count}
{call plural n=$reviews_count words=["отзыв", "отзыва", "отзывов"]}
Вариант с системной функцией перевода Webasyst (_wp()):
{$products_count}
{call plural n=$products_count words=["{_wp("товар")}", "{_wp("товара")}", "{_wp("товаров")}"]}
Результаты:
- Если
$products_count = 1: «Найден 1 товар»,
- Если
$products_count = 3: «Найдено 3 товара»,
- Если
$products_count = 7: «Найдено 7 товаров».
$products_count = 1: «Найден 1 товар»,$products_count = 3: «Найдено 3 товара»,$products_count = 7: «Найдено 7 товаров».Замените массив words на нужные варианты. Например, для слова «отзыв»:
Преимущества подхода
- Универсальность — можно использовать для любых слов: «пользователь», «заказ», «сообщение».
- Чистый код — логика склонения инкапсулирована в одну функцию.
- Текст правильно выглядит — исключает случаи неверного склоненеия слов. Например: 3 товаров, осталось 2 упаковка и т.д.
Частые ошибки
- Неправильный порядок слов в массиве
Обязательный формат:[форма для 1, форма для 2-4, форма для 5+]. - Передача нечисловых значений
Убедитесь, чтоn— целое число (используйтеintval($n)при необходимости).
Итог
Функция plural решает проблему склонения слов в Webasyst всего за несколько строк кода. Её легко интегрировать в любую тему дизайна и отображение слов всегда будет правильным, даже при динамическом изменении чисел.
8 комментариев
Написать комментарийСергей Федорцов WAHUB
Бот Ассистент
Сергей Федорцов WAHUB
Сергей Федорцов WAHUB
Сергей Федорцов WAHUB
Сергей Федорцов WAHUB
bot WAHUB
bot WAHUB