БЛОГОДЖУМЛА - БЛОГ О ДЖУМЛА

Склонение существительного на php - Товар, Товара, Товаров

  • Категория: Virtuemart 1
  • Автор:
  • Просмотров: 12715

 Как только мы установили модуль корзины Virtuemart - сразу замечаем непорядок. 

Добавляем 1 товар - видим в корзине "1 Товар"

еще один товар - видим в корзине "2 Товары

еще один товар - видим в корзине "3 Товары

еще один товар - видим в корзине "4 Товары

еще один товар - видим в корзине "5 Товары"  

и так далее. 

Нехорошо, неаккуратненько. Не спортивно 

А ведь есть простая и красивая функция для решения этой проблемы:

 




function sklonenie($n, $forms) {
 return $n%10==1&&$n%100!=11?$forms[0]:($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$forms[1]:$forms[2]);
 }

 
где $n - наше число, а
$forms=array('товар', 'товара', 'товаров');

 

Открываем \administrator\components\com_virtuemart\html\shop.basket_short.php

и вместо 

 




if ($amount > 1) {
$total_products = $amount ." ". $VM_LANG->_('PHPSHOP_PRODUCTS_LBL');
}
else {
$total_products = $amount ." ". $VM_LANG->_('PHPSHOP_PRODUCT_LBL');
}

пишем

 




function sklonenie($n, $forms) {
 return $n%10==1&&$n%100!=11?$forms[0]:($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$forms[1]:$forms[2]);
 }

$total_products = $amount ." ". sklonenie($amount , array('товар', 'товара', 'товаров') ) ;

 

Обязательно конвертируем в кодировку UTF без BOM (например, с помощью notepad++), сохраняем и наслаждаемся...

P.S. Зоркий читатель Mtwserv заметил недочет решения - "А как можно убрать надпись "Товаров 00 руб." когда корзина пуста ?"
Рассказываю. После кода дописать

 
	if ($amount < 1) {

	$total_products ='В корзине ничего нет, самое время что-нибудь купить';

	}

 

Back to top