Передо мной встала такая задача, когда я занимался интернет-магазином Blue Jay и мне требовалось вывести общее количество товаров в категориях. Мне очень хотелось решить поставленную задачу качественно, то есть, чтобы выводилось «1 товар», «2 товарА», «5 товарОВ», а не «1 товаров» и «2 товаров».
Да уж, тут англичанам хорошо, у них если один товар, то «product», а если не один, то «products». В русском же языке есть три формы множественного числа, да ещё и слово постоянно склоняется в зависимости от чисел, которые стоят перед ним.
Поэтому передо мной встал выбор — либо вообще избавиться от надписи с общим числом товаров, либо как-то упростить её, либо добавить функцию, которая будет склонять слова — на третьем варианте я и остановился:
/* * $num число, от которого будет зависеть форма слова * $form_for_1 первая форма слова, например Товар * $form_for_2 вторая форма слова - Товара * $form_for_5 третья форма множественного числа слова - Товаров */ function true_wordform($num, $form_for_1, $form_for_2, $form_for_5){ $num = abs($num) % 100; // берем число по модулю и сбрасываем сотни (делим на 100, а остаток присваиваем переменной $num) $num_x = $num % 10; // сбрасываем десятки и записываем в новую переменную if ($num > 10 && $num < 20) // если число принадлежит отрезку [11;19] return $form_for_5; if ($num_x > 1 && $num_x < 5) // иначе если число оканчивается на 2,3,4 return $form_for_2; if ($num_x == 1) // иначе если оканчивается на 1 return $form_for_1; return $form_for_5; }
Если вы хотите использовать эту функцию в WordPress, то можете вставить её в файл functions.php
— вы можете найти его в папке с темой.
Всё довольно просто. Теперь, когда я расписал, как это работает, приведу пример:
$max_product = 5; // число, эта переменная может задаваться через какую-то другую функцию или доставаться из базы - неважно echo $max_product . ' ' . true_wordform($max_product, 'товар', 'товара', 'товаров'); // в результате получится "5 товаров"
Читайте также о том, как реализовать склонение слов на JavaScript.
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Миша, спасибо за статьи, часто обращаюсь к твоему блогу за помощью, нахожу его интересным и весьма полезным. Хотелось бы узнать как делать pop-up как у тебя на сайте, тот, что с инфой "об авторе". Если не будет сложно хотелось вы увидеть статью по валидной верстке, спасибо
Привет!
Да, статью по верстке нужно уже давно, но там работы очень много по ней, напишу со временем.
Что касается pop-up:
1) блок должен иметь
position:fixed; right:-ШИРИНА_БЛОКА;
ну и CSS transition.2) при прокрутке через JS меняем CSS-свойство right на положительное число, в итоге блок выезжает :)
У меня всё это в коде сайта наглядно можно посмотреть, файлы v7.css и jcore.js.
спасибо чувак!
Тот же код, но на JS, мб кому то пригодится
Михаил, большое спасибо за ваш труд, за пару месяцев "натянул" на движок дизайн и по факту понял как делать шаблоны, еще раз большое спасибо!
Пожалуйста! Очень рад, что сайт вам помог 🔥
Приветствую. А если надо просклонять числительные с дробями?
например "1,13 товара"
Привет, думаю можно добавить условие
is_float()
.