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

Тема в разделе "Shop-script", создана пользователем fominsa, 18 фев 2008.

Статус темы:
Закрыта.
  1. fominsa

    fominsa

    Регистр.:
    12 фев 2008
    Сообщения:
    234
    Симпатии:
    229
    Не знаю как вам а мне всегда не нравилось когда пишут что то подобное: 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}
     
    A_L_I_E_N, mdss, UDAV и 8 другим нравится это.
  2. Дмитрий Кесаев

    Дмитрий Кесаев aka Zlobniy Babko

    Заблокирован
    Регистр.:
    10 май 2007
    Сообщения:
    1.332
    Симпатии:
    1.265
    Отлично. Мозговал как-то насчет подобного, но function другию хотел прикручивать на окончания: А ОВ. Таким макаром можно и на главной применить к категриям; пример: Мониторы (2) ---> Мониторы (2 наименования).
     
  3. fominsa

    fominsa

    Регистр.:
    12 фев 2008
    Сообщения:
    234
    Симпатии:
    229
    именно поэтому я делал функцию универсал даёте ей параметры она возврящает нужное
    хоть 1 рубль, 2 руб_ля, 5485 рублей.
    хоть 1 тысяча, 2 тысячи, 5 тысяч
     
  4. shadow2k

    shadow2k Создатель

    Регистр.:
    3 янв 2008
    Сообщения:
    45
    Симпатии:
    3
    А как прикрутить поподробнее объясните.
     
  5. fominsa

    fominsa

    Регистр.:
    12 фев 2008
    Сообщения:
    234
    Симпатии:
    229
    shadow2k
    после того как ты прописал данную функциюВ файл core_functions/functions.php
    у тебя как я и говорил ранее
    появляется новая функция
    теперь передаем этой функции нужные параметры в php-файлах
    например :
    $price=2398;
    $ended=true_end($price,"рубль","ру***","рублей");
    //в итоге на выходе переменная $ended будет содержать
    //слово рублей так как именно это слово подходит к цифре
    //2398
    print "$price $ended";
    //Выведет на экран "2398 рублей"
    //если же надо перенести в smarty то пишем
    $smarty->assign("ended", $ended);
    //тогда в шаблоне в который передается перем
    //переменная (файле .tpl.html) у нас есть переменная с
    //правильным окончанием и можно прописывать
    {$ended}
     
  6. Дмитрий Кесаев

    Дмитрий Кесаев aka Zlobniy Babko

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

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

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

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

    fominsa

    Регистр.:
    12 фев 2008
    Сообщения:
    234
    Симпатии:
    229

    Проблема у тебя в том что ты явно не знаеш 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]})
      
     
    ndmitry и Zlobniy Babko нравится это.
  8. Дмитрий Кесаев

    Дмитрий Кесаев aka Zlobniy Babko

    Заблокирован
    Регистр.:
    10 май 2007
    Сообщения:
    1.332
    Симпатии:
    1.265
    Cпс. Получилось:D. php знаю на начальном-любительском уровне. Голова в последнее время не думает.:-]

    Хорошая функция, можно и к кол-ву товара на складе прикрутить, но это уже от нех делать.
     
  9. viktor_viktor

    viktor_viktor Создатель

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

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

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

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