описание делаем правильные окончания 2 товарА 5 товарОВ

Статус
В этой теме нельзя размещать новые ответы.

fominsa

Мой дом здесь!
Регистрация
11 Фев 2008
Сообщения
234
Реакции
230
Не знаю как вам а мне всегда не нравилось когда пишут что то подобное: 1 товар(ов), Уважаемый(ая).
поэтому для shop scripta я сделал мини функцию которая делает правильное окончание взависимости от числа
например:
  • 1 товар
  • 2 товара
  • 5 товаров
  • 151 товар
пользуйтесь


В файл core_functions/functions.php вставляем следующую функцию
PHP:
function true_end($chislo,$n1,$n2,$n5){
	$chislo=(int)$chislo;
	$ch=substr($chislo,-1);
	if ($ch==1){
		if (strlen($chislo)>1){
			$result=substr($chislo,-2,1)==1?$n5:$n1;
		}else{
			$result=$n1;
		}
	}elseif($ch>1&&$ch<5){
		if (strlen($chislo)>1){
			$result=substr($chislo,-2,1)==1?$n5:$n2;
		}else{
			$result=$n2;
		}
	}else{
		$result=$n5;
	}
	return $result;
}
Эта функция принимает 4 переменных
  • $chislo -- число которому необходимо окончание
  • $n1 -- текст при еденице (товар, день)
  • $n2 -- текст при двух еденицах (товара, дня)
  • $n5 -- текст при пяти еденицах (товаров, дней)
возвращает именно тот текст который вам нужен

для того чтобы это прикрепить к нашей корзине надо поправить 4 файла:
\includes\shopping_cart.php
PHP:
//ищем 
//$resCart = cartGetCartContent();
//ниже дописываем
$prod_num=0;
foreach ($resCart["cart_content"] as $value){$prod_num+=$value["quantity"];}
$smarty->assign("shopping_cart_ended", true_end($prod_num,"товар","товара","товаров"));
\includes\shopping_cart_info.php
PHP:
//ищем 
//$smarty->assign("shopping_cart_items", $cnt);
//ниже дописываем
$smarty->assign("shopping_cart_ended", true_end($cnt,"товар","товара","товаров"));
\templates\frontend\shop\shopping_cart_info.tpl.html
PHP:
//ищем
//{$smarty.const.CART_CONTENT_NOT_EMPTY}
//Заменяем на 
{$shopping_cart_ended}
\templates\frontend\shop\shopping_cart.tpl.html
PHP:
//ищем
//{$smarty.const.STRING_PRODUCTS}
//Заменяем на
{$shopping_cart_ended}
 
  • Заблокирован
  • #2
Отлично. Мозговал как-то насчет подобного, но function другию хотел прикручивать на окончания: А ОВ. Таким макаром можно и на главной применить к категриям; пример: Мониторы (2) ---> Мониторы (2 наименования).
 
Отлично. Мозговал как-то насчет подобного, но function другию хотел прикручивать на окончания: А ОВ. Таким макаром можно и на главной применить к категриям; пример: Мониторы (2) ---> Мониторы (2 наименования).

именно поэтому я делал функцию универсал даёте ей параметры она возврящает нужное
хоть 1 рубль, 2 руб_ля, 5485 рублей.
хоть 1 тысяча, 2 тысячи, 5 тысяч
 
А как прикрутить поподробнее объясните.
 
shadow2k
после того как ты прописал данную функциюВ файл core_functions/functions.php
PHP:
function true_end($chislo,$n1,$n2,$n5){
	$chislo=(int)$chislo;
	$ch=substr($chislo,-1);
	if ($ch==1){
		if (strlen($chislo)>1){
			$result=substr($chislo,-2,1)==1?$n5:$n1;
		}else{
			$result=$n1;
		}
	}elseif($ch>1&&$ch<5){
		if (strlen($chislo)>1){
			$result=substr($chislo,-2,1)==1?$n5:$n2;
		}else{
			$result=$n2;
		}
	}else{
		$result=$n5;
	}
	return $result;
}
у тебя как я и говорил ранее
появляется новая функция
Эта функция принимает 4 переменных
  • $chislo -- число которому необходимо окончание
  • $n1 -- текст при еденице (товар, день)
  • $n2 -- текст при двух еденицах (товара, дня)
  • $n5 -- текст при пяти еденицах (товаров, дней)
возвращает именно тот текст который вам нужен

теперь передаем этой функции нужные параметры в php-файлах
например :
$price=2398;
$ended=true_end($price,"рубль","ру***","рублей");
//в итоге на выходе переменная $ended будет содержать
//слово рублей так как именно это слово подходит к цифре
//2398
print "$price $ended";
//Выведет на экран "2398 рублей"
//если же надо перенести в smarty то пишем
$smarty->assign("ended", $ended);
//тогда в шаблоне в который передается перем
//переменная (файле .tpl.html) у нас есть переменная с
//правильным окончанием и можно прописывать
{$ended}
 
  • Заблокирован
  • #6
Вот возник вопрос на вывод кол-ва товаров на главной. За вывод отвечает в файле home.tpl.html - вот эта переменная: [{$root_categories[2]} наименов.] (пример про монитор выше). Заморока и происходит как раз с и [2] - не пойму что к чему.... За место слова "наименов." ставлю не изменяя как пример: {$kolvo}
Получается [{$root_categories[2]} {$kolvo}] но слова не выводит, вернее выводит но...:eek:

А в файле \includes\home.php, если судить по коду, то дописывать нада после переменной $root, хотя ХЗ. Может и не так творю...
Пробовал дописывать и к $smarty->assign("kolvo",..... сюда......
Не получается выдает ошибку. И отдельно писал, не выходит.

Пробовал из 1-го примера ("товар","товара","товаров"), пишет не кол-ву, а по последнему слову "товаров". Шот я подзаипался - помогайте....:bc:

В общем как не кручу - получается: "2 товар" или "2 товаров"
 
Вот возник вопрос на вывод кол-ва товаров на главной. За вывод отвечает в файле home.tpl.html - вот эта переменная: [{$root_categories[2]} наименов.] (пример про монитор выше). Заморока и происходит как раз с и [2] - не пойму что к чему.... За место слова "наименов." ставлю не изменяя как пример: {$kolvo}
Получается [{$root_categories[2]} {$kolvo}] но слова не выводит, вернее выводит но...:eek:

А в файле \includes\home.php, если судить по коду, то дописывать нада после переменной $root, хотя ХЗ. Может и не так творю...
Пробовал дописывать и к $smarty->assign("kolvo",..... сюда......
Не получается выдает ошибку. И отдельно писал, не выходит.

Пробовал из 1-го примера ("товар","товара","товаров"), пишет не кол-ву, а по последнему слову "товаров". Шот я подзаипался - помогайте....:bc:

В общем как не кручу - получается: "2 товар" или "2 товаров"

Проблема у тебя в том что ты явно не знаеш php
ладно разжевываю
  1. добавить функцию которую я представил в первом посте в core_functions\function.php
  2. открыть файл includes\home.php
  3. вставляем строки
    PHP:
    	$q = db_query("SELECT categoryID, name, products_count, picture FROM ".
    		CATEGORIES_TABLE." WHERE categoryID<>0 and parent=1 ORDER BY sort_order, name") or die (db_error());
    	$root = array();
    	while ($row = db_fetch_row($q))
    	{
    		if (!file_exists("./products_pictures/$row[3]")) 
    			$row[3] = "";
    //в это место вставляем строку
    		$row[4]=true_end($row[2],"товар","товара","товаров");
    //----------------------------------------------------
    //Это окончание для главных категорий
    		$root[] = $row;
    	}
    
    	$query = "SELECT categoryID FROM ".CATEGORIES_TABLE." WHERE categoryID<>0 ";
    	$result = array();
    	for ($i=0; $i<count($root); $i++)
    	{
    		$q = db_query("SELECT categoryID, name, products_count, parent FROM ".CATEGORIES_TABLE.
    			" WHERE categoryID<>0 and parent=".$root[$i][0].
    			" ORDER BY sort_order, name " ) or die (db_error());
    		while ($row = db_fetch_row($q))
    //в это место вставляем строку
    
    $row[4]=true_end($row[2],"товар","товара","товаров");
    //----------------------------------------------------
    //Это для отображения правильного окончания подкатегорий
    			$result[] = $row;
    	}
    	$smarty->assign("root_categories",$root);
    	$smarty->assign("root_categories_subs",$result);
  4. теперь открываем home.tpl.html после {$root_categories[2]} вставляем {$root_categories[4]} и на выходе у нас:
    HTML:
    {$root_categories[i][2]} {$root_categories[i][4]}
    [*]для отображения количества товаров у под категорий надо : в файле home.tpl.html вставить после {$root_categories_subs[j][1]}</a> строки ({$root_categories_subs[j][2]} {$root_categories_subs[j][4]}) на выходе:
    HTML:
    {$root_categories_subs[j][1]}</a>({$root_categories_subs[j][2]} {$root_categories_subs[j][4]})
 
  • Заблокирован
  • #8
Cпс. Получилось:D. php знаю на начальном-любительском уровне. Голова в последнее время не думает.:-]

Хорошая функция, можно и к кол-ву товара на складе прикрутить, но это уже от нех делать.
 
Вот возник вопрос на вывод кол-ва товаров на главной. За вывод отвечает в файле home.tpl.html - вот эта переменная: [{$root_categories[2]} наименов.] (пример про монитор выше). Заморока и происходит как раз с и [2] - не пойму что к чему.... За место слова "наименов." ставлю не изменяя как пример: {$kolvo}
Получается [{$root_categories[2]} {$kolvo}] но слова не выводит, вернее выводит но...

А в файле \includes\home.php, если судить по коду, то дописывать нада после переменной $root, хотя ХЗ. Может и не так творю...
Пробовал дописывать и к $smarty->assign("kolvo",..... сюда......
Не получается выдает ошибку. И отдельно писал, не выходит.

Пробовал из 1-го примера ("товар","товара","товаров"), пишет не кол-ву, а по последнему слову "товаров". Шот я подзаипался - помогайте....

В общем как не кручу - получается: "2 товар" или "2 товаров"
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху