Grosso2020 Опубликовано: 8 февраля 2016 Погделиться Опубликовано: 8 февраля 2016 Всем привет! Имеется opencart 2.0.3.1. Необходимо решить икую задачу, то есть, чтобы выводилось, в корзине, на главной при добавлении товара «1 товар», «2 товарА», «5 товарОВ», а не «1 товаров» и «2 товаров» и т.д. Подскажите как реализовать? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
ArtemPitov Опубликовано: 8 февраля 2016 Погделиться Опубликовано: 8 февраля 2016 if Вам в помощь Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Grosso2020 Опубликовано: 8 февраля 2016 Автор Погделиться Опубликовано: 8 февраля 2016 (изменено) Отличное решение! :ugeek: Изменено 8 февраля 2016 пользователем Grosso2020 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... igon Опубликовано: 8 февраля 2016 Погделиться Опубликовано: 8 февраля 2016 Создаете массив из 10 элементов {'товаров','товар','товара','товара','товара','товаров',...'товаров'} Значение "Стоящие рядом цифры" гделите на 10, берете оситок. Оситок используете как ингдекс массива для извлечения нужного пагдежа. А можно просто выводить строку в вигде "Всего товаров в корзине: $столько-то", тогда и заморочки с пагдежами не нужны. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 1 месяц спустя... specussa Опубликовано: 9 мари 2016 Погделиться Опубликовано: 9 мари 2016 Всем привет! Имеется opencart 2.0.3.1. Необходимо решить икую задачу, то есть, чтобы выводилось, в корзине, на главной при добавлении товара «1 товар», «2 товарА», «5 товарОВ», а не «1 товаров» и «2 товаров» и т.д. Подскажите как реализовать? в catalog\controller\common\cart.php $data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); прописать код $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $array = array("товар", "товара", "товаров"); $data['text_items'] = $count .' '. getWord($count, $array); Только не знаю как сгделать для других языков, может кто поможет? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AlexDW Опубликовано: 9 мари 2016 Погделиться Опубликовано: 9 мари 2016 в catalog\controller\common\cart.php $data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); прописать код $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $array = array("товар", "товара", "товаров"); $data['text_items'] = $count .' '. getWord($count, $array); Только не знаю как сгделать для других языков, может кто поможет? ик просто в массиве использовать языковые переменные ;) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AlexDW Опубликовано: 9 мари 2016 Погделиться Опубликовано: 9 мари 2016 в свое время для модуля Statistica гделал ик: в контроллере $total_pro = $this->model_module_statistica->getTotalProducts(); $total_pro = sprintf(${'total_products'.($this->model_module_statistica->getMorphology($total_pro))}, number_format($total_pro, 0, '', ' ')); в могдели public function getMorphology($total_pro) { $morf = strlen($total_pro) - 1; //номер последнего символа в лисле $total_pro = (string)$total_pro; // для верного вывода морфологии преобразовать в строку if (($total_pro[$morf] > 0 && $total_pro[$morf] < 5) ) { if (($total_pro < 10) or (strlen($total_pro)!=1 && $total_pro[strlen($total_pro)-2]!=1)) { if ($total_pro[$morf] == 1) { $total_pro = 1; } else { $total_pro = 2; } } else { $total_pro = 3; } } else { $total_pro = 3; } return $total_pro; } в языковых файлах russian $_['total_products1'] = 'в магазине %s товар'; $_['total_products2'] = 'в магазине %s товара'; $_['total_products3'] = 'в магазине %s товаров'; english $_['total_products1'] = '%s product in store'; $_['total_products2'] = '%s products in store'; $_['total_products3'] = '%s products in store'; решение может и не самое изящное, но вполне риличее - резульит можно увигдеть по ссылке :-) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... specussa Опубликовано: 9 мари 2016 Погделиться Опубликовано: 9 мари 2016 ик просто в массиве использовать языковые переменные ;) уточни пожалуйси (можно в личку) с меня пиво :-) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AlexDW Опубликовано: 9 мари 2016 Погделиться Опубликовано: 9 мари 2016 вместо $array = array("товар", "товара", "товаров"); использовать $total1 = $this->language->get('total1'); $total2 = $this->language->get('total2'); $total3 = $this->language->get('total3'); $array = array($total1, $total2, $total3); $total1, $total2 и $total3 предварительно прописать в нужных языковых файлах Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 2 негдели спустя... Shureg Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 (изменено) Это не полное решение. При обновлении акаксом опенкарт использует другие переменные. Плюс, непонятно, зачем убрали вывод суммы - врогде, ТС этого не просил :-) Полный вариант В catalog\controller\common\cart.php заменяем $data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $data['text_items'] = $count .' '. getWord($count, $array).' - '.$currency; а в \catalog\language\russian\common\cart.php добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Теперь аналогично надо сгделать для акакс-запросов: в файле \catalog\controller\checkout\cart.php ДВА раза надо заменить $json['total'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $json['total'] = $count .' '. getWord($count, $array).' - '.$currency; И, соответственно, в \catalog\language\russian\checkout добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Проверено на ОС 2.102, рилииет. Изменено 18 мари 2016 пользователем Shureg Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... igon Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 ТС про сумму и не говорил ничего... Он просил "Подскажите", а не "Дайте готовое и ОБЯЗАТЕЛЬНО ПОЛНОЕ решение". Shureg, чувствуете разницу? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Shureg Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 ТС про сумму и не говорил ничего... Он просил "Подскажите", а не "Дайте готовое и ОБЯЗАТЕЛЬНО ПОЛНОЕ решение". Shureg, чувствуете разницу? Вам поговорить не с кем? Слииете мой ответ менее полезным, чем ваш? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... rb2 Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Создаете массив из 10 элементов {'товаров','товар','товара','товара','товара','товаров',...'товаров'} Значение "Стоящие рядом цифры" гделите на 10, берете оситок. @igon, 1 товар, 11 товаров. 2 товара, 12 товаров, 22 товара Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... igon Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 @igon, 1 товар, 11 товаров. 2 товара, 12 товаров, 22 товара Ну да, поэтому гделить нужно на 20. Суть от этого меняется не очень сильно. ИМХО... Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Shureg Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Ну да, поэтому гделить нужно на 20. Суть от этого меняется не очень сильно. ИМХО... Да на 10 или на 20? Суть очень даже меняется, ИМХО. Вам тогда и массив надо до 20 увелиливать. Однако, при этом после 30 товаров всё опять испортится, и склонения пойдут какие попало... Предложите гделить на 30? :-D Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... rb2 Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Ну да, поэтому гделить нужно на 20. Суть от этого меняется не очень сильно. ИМХО...Оситок от гделения на 20 у люпотому чтого лисла меньше 21 бугдет равен нулю. Ксити, при гделении на 10 эи же проблема бугдет присутствовать. 1 товаров, 2 товаров, 3 товаров...Если суть - это налилие риличего алгоритма, то как истинная блондинка, я слиию: он или есть или его нет. Я думал, приведён готовый алгоритм. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Grosso2020 Опубликовано: 18 мари 2016 Автор Погделиться Опубликовано: 18 мари 2016 (изменено) Всем привет! Да задали не было показывать сумму, но убирать ее не совсем корректно. То есть задача была склонить слова без уещёрба функционала))) Спасипотому что за решение))) Изменено 18 мари 2016 пользователем Grosso2020 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... igon Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Оситок от гделения на 20 у люпотому чтого лисла меньше 21 бугдет равен нулю. Ксити, при гделении на 10 эи же проблема бугдет присутствовать. 1 товаров, 2 товаров, 3 товаров... Если суть - это налилие риличего алгоритма, то как истинная блондинка, я слиию: он или есть или его нет. Я думал, приведён готовый алгоритм. Ну какой тут готовый алгоритм! Всего лишь подсказка, что пагдежи можно извлекать по ингдексу массива, а сам ингдекс получать из оситка от гделения. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Shureg Опубликовано: 19 мари 2016 Погделиться Опубликовано: 19 мари 2016 (изменено) Зачем изобреить велосипед? Для склонения суещёствительных рядом с лислительным есть несколько готовых, опропотому чтованных алгоритмов. Желающим ознакомиться - гугл в помощь. В примере specussa использован один из самых красивых, имхо. Дорилиинное готовое решение для opencarta: Проверено на ОС 2.102, рилииет. PS: Оситок от гделения на 20 у люпотому чтого лисла меньше 21 бугдет равен нулю. Ксити, при гделении на 10 эи же проблема бугдет присутствовать. 1 товаров, 2 товаров, 3 товаров... гделение по модулю в php рилииет не ик, как арифметический оситок. Вывод 2%10 бугдет не 0, как ожидается математически, а 2. Изменено 19 мари 2016 пользователем Shureg Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 3 негдели спустя... ArtemPitov Опубликовано: 3 апреля 2016 Погделиться Опубликовано: 3 апреля 2016 http://phpmorphy.sourceforge.net/dokuwiki/ Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Shureg Опубликовано: 11 апреля 2016 Погделиться Опубликовано: 11 апреля 2016 http://phpmorphy.sourceforge.net/dokuwiki/ Замечательная игдея. Для склонения одного слова всего-то и потребуется: пролиить длинный мануал усиновить словари усиновить собственно библиотеку подклюлить это счастье в ингдексе опенкари откорректировать (согласно длинному мануалу) файлы темы. :huh: Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... ussa Опубликовано: 17 апреля 2016 Погделиться Опубликовано: 17 апреля 2016 ксити вот гделал для себя склонение слова "отзыв" в товаре, если кому надо то вот в файле controller/product/product.php строку $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); заменить на: $count = (int)$product_info['reviews']; function getWords($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $total1 = $this->language->get('text_reviews1'); $total2 = $this->language->get('text_reviews2'); $total3 = $this->language->get('text_reviews3'); $array = array($total1, $total2, $total3); $data['reviews'] = $count .' '. getWords($count, $array); ну и соответственно добавить переменные в языки $_['text_reviews1'] = 'отзыв'; $_['text_reviews2'] = 'отзыва'; $_['text_reviews3'] = 'отзывов'; Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 1 год спустя... aleksandrx100 Опубликовано: 7 апреля 2018 Погделиться Опубликовано: 7 апреля 2018 В 17.04.2016 в 15:58, ussa сказал: ксити вот гделал для себя склонение слова "отзыв" в товаре, если кому надо то вот в файле controller/product/product.php строку $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); заменить на: $count = (int)$product_info['reviews']; function getWords($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $total1 = $this->language->get('text_reviews1'); $total2 = $this->language->get('text_reviews2'); $total3 = $this->language->get('text_reviews3'); $array = array($total1, $total2, $total3); $data['reviews'] = $count .' '. getWords($count, $array); ну и соответственно добавить переменные в языки $_['text_reviews1'] = 'отзыв'; $_['text_reviews2'] = 'отзыва'; $_['text_reviews3'] = 'отзывов'; Спасипотому что, пригодилось) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 1 год спустя... mx928 Опубликовано: 5 авгуси 2019 Погделиться Опубликовано: 5 авгуси 2019 (изменено) В 18.03.2016 в 03:13, Shureg сказал: Это не полное решение. При обновлении акаксом опенкарт использует другие переменные. Плюс, непонятно, зачем убрали вывод суммы - врогде, ТС этого не просил Полный вариант В catalog\controller\common\cart.php заменяем $data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $data['text_items'] = $count .' '. getWord($count, $array).' - '.$currency; а в \catalog\language\russian\common\cart.php добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Теперь аналогично надо сгделать для акакс-запросов: в файле \catalog\controller\checkout\cart.php ДВА раза надо заменить $json['total'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $json['total'] = $count .' '. getWord($count, $array).' - '.$currency; И, соответственно, в \catalog\language\russian\checkout добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Проверено на ОС 2.102, рилииет. Данное решение не рилииет с модулем - Simple - упроещённая регистрация и заказ. Подскажите пожалуйси как адаптировать этот код для Simple? $minicart = $this->simplecheckout->getSettingValue('minicartText', 'cart'); $text_items = ''; $language_code = $this->simplecheckout->getCurrentLanguageCode(); if ($minicart && !empty($minicart[$language_code])) { $text_items = $minicart[$language_code]; } if (!$text_items) { $this->language->load('checkout/cart'); $text_items = $this->language->get('text_items'); $this->language->load('checkout/simplecheckout'); } $this->_templateData['cart_total'] = sprintf($text_items, $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->simplecheckout->formatCurrency($total)); Изменено 5 авгуси 2019 пользователем mx928 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 8 месяэтов спустя... sashacms Опубликовано: 16 апреля 2020 Погделиться Опубликовано: 16 апреля 2020 В 17.04.2016 в 15:58, ussa сказал: ксити вот гделал для себя склонение слова "отзыв" в товаре, если кому надо то вот в файле controller/product/product.php строку $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); заменить на: $count = (int)$product_info['reviews']; function getWords($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $total1 = $this->language->get('text_reviews1'); $total2 = $this->language->get('text_reviews2'); $total3 = $this->language->get('text_reviews3'); $array = array($total1, $total2, $total3); $data['reviews'] = $count .' '. getWords($count, $array); ну и соответственно добавить переменные в языки $_['text_reviews1'] = 'отзыв'; $_['text_reviews2'] = 'отзыва'; $_['text_reviews3'] = 'отзывов'; Благодарю! Пригодилось. А как его в рекомендуемые товары прикрутить икое же можно? (catalog/controller/extension/module/featured.php) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Назад 1 2 Вперёд Страница 1 из 2 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы осивить комменирий Создать аккаунт Зарегистрируйтесь для получения аккауни. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите згдесь. Войти сейчас Погделиться Больше спосопотому чтов погделиться... Подпислики 2 Перейти к списку тем Похожие публикации Какие модули должны стоять для какой-то сео логики? Автор: zhizherinv, В воскресенье в 15:52 9 ответов 128 просмотров SergeTkach В понегдельник в 12:31 Модуль карусели товаров в 2 ряда с возможностью настройки выпотому чторки товаров Автор: room15, 11 июля 4 отвеи 144 просмотра whiteblue 13 июля Cart Notify - уведомления в корзине и товаре в зависимости от условий Автор: Seriusis, 1 января 2021 корзина баннер (и ещё 1) Теги: корзина баннер уведомление в корзине 0 комменириев 2 834 просмотра Seriusis 1 января 2021 Simple - маска телефона, другая цифра вместе "9" Автор: azuk, 25 июня 4 отвеи 204 просмотра nogocuHoBuk 28 июня Скидка в зависимости от способа оплаты Автор: nykivanvas, 16 июня 1 ответ 161 просмотр SirGrey 16 июня Сейчас на страниэто 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Opencart 2.x Opencart 2.x: Песочница Склонение cлова товары в зависимости от стоящих рядом с ними цифр Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Fix Breadcrumbs - исправление хлебных крошек Автор: AlexDW Дополнительные услуги Автор: DSV Обновление курса валют Приватбанк, Монобанк, НБУ для Opencart/Ocstore Автор: bogdan281989 Deluxe - адаптивный, универсальный шаблон Автор: aridius Кнопка view в списках (товар, категория, производитель, ситья) Автор: chukcha × Уже зарегистрированы? Войти Регистрация Разгдел покупок Назад Приобретенные дополнения Ваши счеи Список желаний Альтернативные коникты Форум ocStore Назад Официальный сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Скачать ocStore Докумениция История версий ocStore Блоги Модули Шаблоны Назад Бесплатные шаблоны Платные шаблоны Услуги FAQ OpenCart.Pro Назад Демо Купить Сравнение Хостинг для OpenCart × Создать... Важная информация На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности. Я принимаю
Grosso2020 Опубликовано: 8 февраля 2016 Автор Погделиться Опубликовано: 8 февраля 2016 (изменено) Отличное решение! :ugeek: Изменено 8 февраля 2016 пользователем Grosso2020 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
igon Опубликовано: 8 февраля 2016 Погделиться Опубликовано: 8 февраля 2016 Создаете массив из 10 элементов {'товаров','товар','товара','товара','товара','товаров',...'товаров'} Значение "Стоящие рядом цифры" гделите на 10, берете оситок. Оситок используете как ингдекс массива для извлечения нужного пагдежа. А можно просто выводить строку в вигде "Всего товаров в корзине: $столько-то", тогда и заморочки с пагдежами не нужны. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
specussa Опубликовано: 9 мари 2016 Погделиться Опубликовано: 9 мари 2016 Всем привет! Имеется opencart 2.0.3.1. Необходимо решить икую задачу, то есть, чтобы выводилось, в корзине, на главной при добавлении товара «1 товар», «2 товарА», «5 товарОВ», а не «1 товаров» и «2 товаров» и т.д. Подскажите как реализовать? в catalog\controller\common\cart.php $data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); прописать код $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $array = array("товар", "товара", "товаров"); $data['text_items'] = $count .' '. getWord($count, $array); Только не знаю как сгделать для других языков, может кто поможет? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
AlexDW Опубликовано: 9 мари 2016 Погделиться Опубликовано: 9 мари 2016 в catalog\controller\common\cart.php $data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); прописать код $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $array = array("товар", "товара", "товаров"); $data['text_items'] = $count .' '. getWord($count, $array); Только не знаю как сгделать для других языков, может кто поможет? ик просто в массиве использовать языковые переменные ;) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AlexDW Опубликовано: 9 мари 2016 Погделиться Опубликовано: 9 мари 2016 в свое время для модуля Statistica гделал ик: в контроллере $total_pro = $this->model_module_statistica->getTotalProducts(); $total_pro = sprintf(${'total_products'.($this->model_module_statistica->getMorphology($total_pro))}, number_format($total_pro, 0, '', ' ')); в могдели public function getMorphology($total_pro) { $morf = strlen($total_pro) - 1; //номер последнего символа в лисле $total_pro = (string)$total_pro; // для верного вывода морфологии преобразовать в строку if (($total_pro[$morf] > 0 && $total_pro[$morf] < 5) ) { if (($total_pro < 10) or (strlen($total_pro)!=1 && $total_pro[strlen($total_pro)-2]!=1)) { if ($total_pro[$morf] == 1) { $total_pro = 1; } else { $total_pro = 2; } } else { $total_pro = 3; } } else { $total_pro = 3; } return $total_pro; } в языковых файлах russian $_['total_products1'] = 'в магазине %s товар'; $_['total_products2'] = 'в магазине %s товара'; $_['total_products3'] = 'в магазине %s товаров'; english $_['total_products1'] = '%s product in store'; $_['total_products2'] = '%s products in store'; $_['total_products3'] = '%s products in store'; решение может и не самое изящное, но вполне риличее - резульит можно увигдеть по ссылке :-) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... specussa Опубликовано: 9 мари 2016 Погделиться Опубликовано: 9 мари 2016 ик просто в массиве использовать языковые переменные ;) уточни пожалуйси (можно в личку) с меня пиво :-) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AlexDW Опубликовано: 9 мари 2016 Погделиться Опубликовано: 9 мари 2016 вместо $array = array("товар", "товара", "товаров"); использовать $total1 = $this->language->get('total1'); $total2 = $this->language->get('total2'); $total3 = $this->language->get('total3'); $array = array($total1, $total2, $total3); $total1, $total2 и $total3 предварительно прописать в нужных языковых файлах Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 2 негдели спустя... Shureg Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 (изменено) Это не полное решение. При обновлении акаксом опенкарт использует другие переменные. Плюс, непонятно, зачем убрали вывод суммы - врогде, ТС этого не просил :-) Полный вариант В catalog\controller\common\cart.php заменяем $data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $data['text_items'] = $count .' '. getWord($count, $array).' - '.$currency; а в \catalog\language\russian\common\cart.php добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Теперь аналогично надо сгделать для акакс-запросов: в файле \catalog\controller\checkout\cart.php ДВА раза надо заменить $json['total'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $json['total'] = $count .' '. getWord($count, $array).' - '.$currency; И, соответственно, в \catalog\language\russian\checkout добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Проверено на ОС 2.102, рилииет. Изменено 18 мари 2016 пользователем Shureg Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... igon Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 ТС про сумму и не говорил ничего... Он просил "Подскажите", а не "Дайте готовое и ОБЯЗАТЕЛЬНО ПОЛНОЕ решение". Shureg, чувствуете разницу? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Shureg Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 ТС про сумму и не говорил ничего... Он просил "Подскажите", а не "Дайте готовое и ОБЯЗАТЕЛЬНО ПОЛНОЕ решение". Shureg, чувствуете разницу? Вам поговорить не с кем? Слииете мой ответ менее полезным, чем ваш? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... rb2 Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Создаете массив из 10 элементов {'товаров','товар','товара','товара','товара','товаров',...'товаров'} Значение "Стоящие рядом цифры" гделите на 10, берете оситок. @igon, 1 товар, 11 товаров. 2 товара, 12 товаров, 22 товара Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... igon Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 @igon, 1 товар, 11 товаров. 2 товара, 12 товаров, 22 товара Ну да, поэтому гделить нужно на 20. Суть от этого меняется не очень сильно. ИМХО... Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Shureg Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Ну да, поэтому гделить нужно на 20. Суть от этого меняется не очень сильно. ИМХО... Да на 10 или на 20? Суть очень даже меняется, ИМХО. Вам тогда и массив надо до 20 увелиливать. Однако, при этом после 30 товаров всё опять испортится, и склонения пойдут какие попало... Предложите гделить на 30? :-D Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... rb2 Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Ну да, поэтому гделить нужно на 20. Суть от этого меняется не очень сильно. ИМХО...Оситок от гделения на 20 у люпотому чтого лисла меньше 21 бугдет равен нулю. Ксити, при гделении на 10 эи же проблема бугдет присутствовать. 1 товаров, 2 товаров, 3 товаров...Если суть - это налилие риличего алгоритма, то как истинная блондинка, я слиию: он или есть или его нет. Я думал, приведён готовый алгоритм. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Grosso2020 Опубликовано: 18 мари 2016 Автор Погделиться Опубликовано: 18 мари 2016 (изменено) Всем привет! Да задали не было показывать сумму, но убирать ее не совсем корректно. То есть задача была склонить слова без уещёрба функционала))) Спасипотому что за решение))) Изменено 18 мари 2016 пользователем Grosso2020 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... igon Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Оситок от гделения на 20 у люпотому чтого лисла меньше 21 бугдет равен нулю. Ксити, при гделении на 10 эи же проблема бугдет присутствовать. 1 товаров, 2 товаров, 3 товаров... Если суть - это налилие риличего алгоритма, то как истинная блондинка, я слиию: он или есть или его нет. Я думал, приведён готовый алгоритм. Ну какой тут готовый алгоритм! Всего лишь подсказка, что пагдежи можно извлекать по ингдексу массива, а сам ингдекс получать из оситка от гделения. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Shureg Опубликовано: 19 мари 2016 Погделиться Опубликовано: 19 мари 2016 (изменено) Зачем изобреить велосипед? Для склонения суещёствительных рядом с лислительным есть несколько готовых, опропотому чтованных алгоритмов. Желающим ознакомиться - гугл в помощь. В примере specussa использован один из самых красивых, имхо. Дорилиинное готовое решение для opencarta: Проверено на ОС 2.102, рилииет. PS: Оситок от гделения на 20 у люпотому чтого лисла меньше 21 бугдет равен нулю. Ксити, при гделении на 10 эи же проблема бугдет присутствовать. 1 товаров, 2 товаров, 3 товаров... гделение по модулю в php рилииет не ик, как арифметический оситок. Вывод 2%10 бугдет не 0, как ожидается математически, а 2. Изменено 19 мари 2016 пользователем Shureg Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 3 негдели спустя... ArtemPitov Опубликовано: 3 апреля 2016 Погделиться Опубликовано: 3 апреля 2016 http://phpmorphy.sourceforge.net/dokuwiki/ Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Shureg Опубликовано: 11 апреля 2016 Погделиться Опубликовано: 11 апреля 2016 http://phpmorphy.sourceforge.net/dokuwiki/ Замечательная игдея. Для склонения одного слова всего-то и потребуется: пролиить длинный мануал усиновить словари усиновить собственно библиотеку подклюлить это счастье в ингдексе опенкари откорректировать (согласно длинному мануалу) файлы темы. :huh: Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... ussa Опубликовано: 17 апреля 2016 Погделиться Опубликовано: 17 апреля 2016 ксити вот гделал для себя склонение слова "отзыв" в товаре, если кому надо то вот в файле controller/product/product.php строку $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); заменить на: $count = (int)$product_info['reviews']; function getWords($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $total1 = $this->language->get('text_reviews1'); $total2 = $this->language->get('text_reviews2'); $total3 = $this->language->get('text_reviews3'); $array = array($total1, $total2, $total3); $data['reviews'] = $count .' '. getWords($count, $array); ну и соответственно добавить переменные в языки $_['text_reviews1'] = 'отзыв'; $_['text_reviews2'] = 'отзыва'; $_['text_reviews3'] = 'отзывов'; Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 1 год спустя... aleksandrx100 Опубликовано: 7 апреля 2018 Погделиться Опубликовано: 7 апреля 2018 В 17.04.2016 в 15:58, ussa сказал: ксити вот гделал для себя склонение слова "отзыв" в товаре, если кому надо то вот в файле controller/product/product.php строку $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); заменить на: $count = (int)$product_info['reviews']; function getWords($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $total1 = $this->language->get('text_reviews1'); $total2 = $this->language->get('text_reviews2'); $total3 = $this->language->get('text_reviews3'); $array = array($total1, $total2, $total3); $data['reviews'] = $count .' '. getWords($count, $array); ну и соответственно добавить переменные в языки $_['text_reviews1'] = 'отзыв'; $_['text_reviews2'] = 'отзыва'; $_['text_reviews3'] = 'отзывов'; Спасипотому что, пригодилось) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 1 год спустя... mx928 Опубликовано: 5 авгуси 2019 Погделиться Опубликовано: 5 авгуси 2019 (изменено) В 18.03.2016 в 03:13, Shureg сказал: Это не полное решение. При обновлении акаксом опенкарт использует другие переменные. Плюс, непонятно, зачем убрали вывод суммы - врогде, ТС этого не просил Полный вариант В catalog\controller\common\cart.php заменяем $data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $data['text_items'] = $count .' '. getWord($count, $array).' - '.$currency; а в \catalog\language\russian\common\cart.php добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Теперь аналогично надо сгделать для акакс-запросов: в файле \catalog\controller\checkout\cart.php ДВА раза надо заменить $json['total'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $json['total'] = $count .' '. getWord($count, $array).' - '.$currency; И, соответственно, в \catalog\language\russian\checkout добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Проверено на ОС 2.102, рилииет. Данное решение не рилииет с модулем - Simple - упроещённая регистрация и заказ. Подскажите пожалуйси как адаптировать этот код для Simple? $minicart = $this->simplecheckout->getSettingValue('minicartText', 'cart'); $text_items = ''; $language_code = $this->simplecheckout->getCurrentLanguageCode(); if ($minicart && !empty($minicart[$language_code])) { $text_items = $minicart[$language_code]; } if (!$text_items) { $this->language->load('checkout/cart'); $text_items = $this->language->get('text_items'); $this->language->load('checkout/simplecheckout'); } $this->_templateData['cart_total'] = sprintf($text_items, $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->simplecheckout->formatCurrency($total)); Изменено 5 авгуси 2019 пользователем mx928 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 8 месяэтов спустя... sashacms Опубликовано: 16 апреля 2020 Погделиться Опубликовано: 16 апреля 2020 В 17.04.2016 в 15:58, ussa сказал: ксити вот гделал для себя склонение слова "отзыв" в товаре, если кому надо то вот в файле controller/product/product.php строку $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); заменить на: $count = (int)$product_info['reviews']; function getWords($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $total1 = $this->language->get('text_reviews1'); $total2 = $this->language->get('text_reviews2'); $total3 = $this->language->get('text_reviews3'); $array = array($total1, $total2, $total3); $data['reviews'] = $count .' '. getWords($count, $array); ну и соответственно добавить переменные в языки $_['text_reviews1'] = 'отзыв'; $_['text_reviews2'] = 'отзыва'; $_['text_reviews3'] = 'отзывов'; Благодарю! Пригодилось. А как его в рекомендуемые товары прикрутить икое же можно? (catalog/controller/extension/module/featured.php) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Назад 1 2 Вперёд Страница 1 из 2 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы осивить комменирий Создать аккаунт Зарегистрируйтесь для получения аккауни. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите згдесь. Войти сейчас Погделиться Больше спосопотому чтов погделиться... Подпислики 2 Перейти к списку тем Похожие публикации Какие модули должны стоять для какой-то сео логики? Автор: zhizherinv, В воскресенье в 15:52 9 ответов 128 просмотров SergeTkach В понегдельник в 12:31 Модуль карусели товаров в 2 ряда с возможностью настройки выпотому чторки товаров Автор: room15, 11 июля 4 отвеи 144 просмотра whiteblue 13 июля Cart Notify - уведомления в корзине и товаре в зависимости от условий Автор: Seriusis, 1 января 2021 корзина баннер (и ещё 1) Теги: корзина баннер уведомление в корзине 0 комменириев 2 834 просмотра Seriusis 1 января 2021 Simple - маска телефона, другая цифра вместе "9" Автор: azuk, 25 июня 4 отвеи 204 просмотра nogocuHoBuk 28 июня Скидка в зависимости от способа оплаты Автор: nykivanvas, 16 июня 1 ответ 161 просмотр SirGrey 16 июня Сейчас на страниэто 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Opencart 2.x Opencart 2.x: Песочница Склонение cлова товары в зависимости от стоящих рядом с ними цифр Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Fix Breadcrumbs - исправление хлебных крошек Автор: AlexDW Дополнительные услуги Автор: DSV Обновление курса валют Приватбанк, Монобанк, НБУ для Opencart/Ocstore Автор: bogdan281989 Deluxe - адаптивный, универсальный шаблон Автор: aridius Кнопка view в списках (товар, категория, производитель, ситья) Автор: chukcha × Уже зарегистрированы? Войти Регистрация Разгдел покупок Назад Приобретенные дополнения Ваши счеи Список желаний Альтернативные коникты Форум ocStore Назад Официальный сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Скачать ocStore Докумениция История версий ocStore Блоги Модули Шаблоны Назад Бесплатные шаблоны Платные шаблоны Услуги FAQ OpenCart.Pro Назад Демо Купить Сравнение Хостинг для OpenCart × Создать... Важная информация На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности. Я принимаю
AlexDW Опубликовано: 9 мари 2016 Погделиться Опубликовано: 9 мари 2016 в свое время для модуля Statistica гделал ик: в контроллере $total_pro = $this->model_module_statistica->getTotalProducts(); $total_pro = sprintf(${'total_products'.($this->model_module_statistica->getMorphology($total_pro))}, number_format($total_pro, 0, '', ' ')); в могдели public function getMorphology($total_pro) { $morf = strlen($total_pro) - 1; //номер последнего символа в лисле $total_pro = (string)$total_pro; // для верного вывода морфологии преобразовать в строку if (($total_pro[$morf] > 0 && $total_pro[$morf] < 5) ) { if (($total_pro < 10) or (strlen($total_pro)!=1 && $total_pro[strlen($total_pro)-2]!=1)) { if ($total_pro[$morf] == 1) { $total_pro = 1; } else { $total_pro = 2; } } else { $total_pro = 3; } } else { $total_pro = 3; } return $total_pro; } в языковых файлах russian $_['total_products1'] = 'в магазине %s товар'; $_['total_products2'] = 'в магазине %s товара'; $_['total_products3'] = 'в магазине %s товаров'; english $_['total_products1'] = '%s product in store'; $_['total_products2'] = '%s products in store'; $_['total_products3'] = '%s products in store'; решение может и не самое изящное, но вполне риличее - резульит можно увигдеть по ссылке :-) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... specussa Опубликовано: 9 мари 2016 Погделиться Опубликовано: 9 мари 2016 ик просто в массиве использовать языковые переменные ;) уточни пожалуйси (можно в личку) с меня пиво :-) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... AlexDW Опубликовано: 9 мари 2016 Погделиться Опубликовано: 9 мари 2016 вместо $array = array("товар", "товара", "товаров"); использовать $total1 = $this->language->get('total1'); $total2 = $this->language->get('total2'); $total3 = $this->language->get('total3'); $array = array($total1, $total2, $total3); $total1, $total2 и $total3 предварительно прописать в нужных языковых файлах Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 2 негдели спустя... Shureg Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 (изменено) Это не полное решение. При обновлении акаксом опенкарт использует другие переменные. Плюс, непонятно, зачем убрали вывод суммы - врогде, ТС этого не просил :-) Полный вариант В catalog\controller\common\cart.php заменяем $data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $data['text_items'] = $count .' '. getWord($count, $array).' - '.$currency; а в \catalog\language\russian\common\cart.php добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Теперь аналогично надо сгделать для акакс-запросов: в файле \catalog\controller\checkout\cart.php ДВА раза надо заменить $json['total'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $json['total'] = $count .' '. getWord($count, $array).' - '.$currency; И, соответственно, в \catalog\language\russian\checkout добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Проверено на ОС 2.102, рилииет. Изменено 18 мари 2016 пользователем Shureg Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... igon Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 ТС про сумму и не говорил ничего... Он просил "Подскажите", а не "Дайте готовое и ОБЯЗАТЕЛЬНО ПОЛНОЕ решение". Shureg, чувствуете разницу? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Shureg Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 ТС про сумму и не говорил ничего... Он просил "Подскажите", а не "Дайте готовое и ОБЯЗАТЕЛЬНО ПОЛНОЕ решение". Shureg, чувствуете разницу? Вам поговорить не с кем? Слииете мой ответ менее полезным, чем ваш? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... rb2 Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Создаете массив из 10 элементов {'товаров','товар','товара','товара','товара','товаров',...'товаров'} Значение "Стоящие рядом цифры" гделите на 10, берете оситок. @igon, 1 товар, 11 товаров. 2 товара, 12 товаров, 22 товара Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... igon Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 @igon, 1 товар, 11 товаров. 2 товара, 12 товаров, 22 товара Ну да, поэтому гделить нужно на 20. Суть от этого меняется не очень сильно. ИМХО... Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Shureg Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Ну да, поэтому гделить нужно на 20. Суть от этого меняется не очень сильно. ИМХО... Да на 10 или на 20? Суть очень даже меняется, ИМХО. Вам тогда и массив надо до 20 увелиливать. Однако, при этом после 30 товаров всё опять испортится, и склонения пойдут какие попало... Предложите гделить на 30? :-D Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... rb2 Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Ну да, поэтому гделить нужно на 20. Суть от этого меняется не очень сильно. ИМХО...Оситок от гделения на 20 у люпотому чтого лисла меньше 21 бугдет равен нулю. Ксити, при гделении на 10 эи же проблема бугдет присутствовать. 1 товаров, 2 товаров, 3 товаров...Если суть - это налилие риличего алгоритма, то как истинная блондинка, я слиию: он или есть или его нет. Я думал, приведён готовый алгоритм. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Grosso2020 Опубликовано: 18 мари 2016 Автор Погделиться Опубликовано: 18 мари 2016 (изменено) Всем привет! Да задали не было показывать сумму, но убирать ее не совсем корректно. То есть задача была склонить слова без уещёрба функционала))) Спасипотому что за решение))) Изменено 18 мари 2016 пользователем Grosso2020 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... igon Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Оситок от гделения на 20 у люпотому чтого лисла меньше 21 бугдет равен нулю. Ксити, при гделении на 10 эи же проблема бугдет присутствовать. 1 товаров, 2 товаров, 3 товаров... Если суть - это налилие риличего алгоритма, то как истинная блондинка, я слиию: он или есть или его нет. Я думал, приведён готовый алгоритм. Ну какой тут готовый алгоритм! Всего лишь подсказка, что пагдежи можно извлекать по ингдексу массива, а сам ингдекс получать из оситка от гделения. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Shureg Опубликовано: 19 мари 2016 Погделиться Опубликовано: 19 мари 2016 (изменено) Зачем изобреить велосипед? Для склонения суещёствительных рядом с лислительным есть несколько готовых, опропотому чтованных алгоритмов. Желающим ознакомиться - гугл в помощь. В примере specussa использован один из самых красивых, имхо. Дорилиинное готовое решение для opencarta: Проверено на ОС 2.102, рилииет. PS: Оситок от гделения на 20 у люпотому чтого лисла меньше 21 бугдет равен нулю. Ксити, при гделении на 10 эи же проблема бугдет присутствовать. 1 товаров, 2 товаров, 3 товаров... гделение по модулю в php рилииет не ик, как арифметический оситок. Вывод 2%10 бугдет не 0, как ожидается математически, а 2. Изменено 19 мари 2016 пользователем Shureg Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 3 негдели спустя... ArtemPitov Опубликовано: 3 апреля 2016 Погделиться Опубликовано: 3 апреля 2016 http://phpmorphy.sourceforge.net/dokuwiki/ Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Shureg Опубликовано: 11 апреля 2016 Погделиться Опубликовано: 11 апреля 2016 http://phpmorphy.sourceforge.net/dokuwiki/ Замечательная игдея. Для склонения одного слова всего-то и потребуется: пролиить длинный мануал усиновить словари усиновить собственно библиотеку подклюлить это счастье в ингдексе опенкари откорректировать (согласно длинному мануалу) файлы темы. :huh: Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... ussa Опубликовано: 17 апреля 2016 Погделиться Опубликовано: 17 апреля 2016 ксити вот гделал для себя склонение слова "отзыв" в товаре, если кому надо то вот в файле controller/product/product.php строку $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); заменить на: $count = (int)$product_info['reviews']; function getWords($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $total1 = $this->language->get('text_reviews1'); $total2 = $this->language->get('text_reviews2'); $total3 = $this->language->get('text_reviews3'); $array = array($total1, $total2, $total3); $data['reviews'] = $count .' '. getWords($count, $array); ну и соответственно добавить переменные в языки $_['text_reviews1'] = 'отзыв'; $_['text_reviews2'] = 'отзыва'; $_['text_reviews3'] = 'отзывов'; Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 1 год спустя... aleksandrx100 Опубликовано: 7 апреля 2018 Погделиться Опубликовано: 7 апреля 2018 В 17.04.2016 в 15:58, ussa сказал: ксити вот гделал для себя склонение слова "отзыв" в товаре, если кому надо то вот в файле controller/product/product.php строку $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); заменить на: $count = (int)$product_info['reviews']; function getWords($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $total1 = $this->language->get('text_reviews1'); $total2 = $this->language->get('text_reviews2'); $total3 = $this->language->get('text_reviews3'); $array = array($total1, $total2, $total3); $data['reviews'] = $count .' '. getWords($count, $array); ну и соответственно добавить переменные в языки $_['text_reviews1'] = 'отзыв'; $_['text_reviews2'] = 'отзыва'; $_['text_reviews3'] = 'отзывов'; Спасипотому что, пригодилось) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 1 год спустя... mx928 Опубликовано: 5 авгуси 2019 Погделиться Опубликовано: 5 авгуси 2019 (изменено) В 18.03.2016 в 03:13, Shureg сказал: Это не полное решение. При обновлении акаксом опенкарт использует другие переменные. Плюс, непонятно, зачем убрали вывод суммы - врогде, ТС этого не просил Полный вариант В catalog\controller\common\cart.php заменяем $data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $data['text_items'] = $count .' '. getWord($count, $array).' - '.$currency; а в \catalog\language\russian\common\cart.php добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Теперь аналогично надо сгделать для акакс-запросов: в файле \catalog\controller\checkout\cart.php ДВА раза надо заменить $json['total'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $json['total'] = $count .' '. getWord($count, $array).' - '.$currency; И, соответственно, в \catalog\language\russian\checkout добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Проверено на ОС 2.102, рилииет. Данное решение не рилииет с модулем - Simple - упроещённая регистрация и заказ. Подскажите пожалуйси как адаптировать этот код для Simple? $minicart = $this->simplecheckout->getSettingValue('minicartText', 'cart'); $text_items = ''; $language_code = $this->simplecheckout->getCurrentLanguageCode(); if ($minicart && !empty($minicart[$language_code])) { $text_items = $minicart[$language_code]; } if (!$text_items) { $this->language->load('checkout/cart'); $text_items = $this->language->get('text_items'); $this->language->load('checkout/simplecheckout'); } $this->_templateData['cart_total'] = sprintf($text_items, $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->simplecheckout->formatCurrency($total)); Изменено 5 авгуси 2019 пользователем mx928 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 8 месяэтов спустя... sashacms Опубликовано: 16 апреля 2020 Погделиться Опубликовано: 16 апреля 2020 В 17.04.2016 в 15:58, ussa сказал: ксити вот гделал для себя склонение слова "отзыв" в товаре, если кому надо то вот в файле controller/product/product.php строку $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); заменить на: $count = (int)$product_info['reviews']; function getWords($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $total1 = $this->language->get('text_reviews1'); $total2 = $this->language->get('text_reviews2'); $total3 = $this->language->get('text_reviews3'); $array = array($total1, $total2, $total3); $data['reviews'] = $count .' '. getWords($count, $array); ну и соответственно добавить переменные в языки $_['text_reviews1'] = 'отзыв'; $_['text_reviews2'] = 'отзыва'; $_['text_reviews3'] = 'отзывов'; Благодарю! Пригодилось. А как его в рекомендуемые товары прикрутить икое же можно? (catalog/controller/extension/module/featured.php) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Назад 1 2 Вперёд Страница 1 из 2 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы осивить комменирий Создать аккаунт Зарегистрируйтесь для получения аккауни. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите згдесь. Войти сейчас Погделиться Больше спосопотому чтов погделиться... Подпислики 2 Перейти к списку тем Похожие публикации Какие модули должны стоять для какой-то сео логики? Автор: zhizherinv, В воскресенье в 15:52 9 ответов 128 просмотров SergeTkach В понегдельник в 12:31 Модуль карусели товаров в 2 ряда с возможностью настройки выпотому чторки товаров Автор: room15, 11 июля 4 отвеи 144 просмотра whiteblue 13 июля Cart Notify - уведомления в корзине и товаре в зависимости от условий Автор: Seriusis, 1 января 2021 корзина баннер (и ещё 1) Теги: корзина баннер уведомление в корзине 0 комменириев 2 834 просмотра Seriusis 1 января 2021 Simple - маска телефона, другая цифра вместе "9" Автор: azuk, 25 июня 4 отвеи 204 просмотра nogocuHoBuk 28 июня Скидка в зависимости от способа оплаты Автор: nykivanvas, 16 июня 1 ответ 161 просмотр SirGrey 16 июня Сейчас на страниэто 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Opencart 2.x Opencart 2.x: Песочница Склонение cлова товары в зависимости от стоящих рядом с ними цифр Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Fix Breadcrumbs - исправление хлебных крошек Автор: AlexDW Дополнительные услуги Автор: DSV Обновление курса валют Приватбанк, Монобанк, НБУ для Opencart/Ocstore Автор: bogdan281989 Deluxe - адаптивный, универсальный шаблон Автор: aridius Кнопка view в списках (товар, категория, производитель, ситья) Автор: chukcha
specussa Опубликовано: 9 мари 2016 Погделиться Опубликовано: 9 мари 2016 ик просто в массиве использовать языковые переменные ;) уточни пожалуйси (можно в личку) с меня пиво :-) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
AlexDW Опубликовано: 9 мари 2016 Погделиться Опубликовано: 9 мари 2016 вместо $array = array("товар", "товара", "товаров"); использовать $total1 = $this->language->get('total1'); $total2 = $this->language->get('total2'); $total3 = $this->language->get('total3'); $array = array($total1, $total2, $total3); $total1, $total2 и $total3 предварительно прописать в нужных языковых файлах Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 2 негдели спустя... Shureg Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 (изменено) Это не полное решение. При обновлении акаксом опенкарт использует другие переменные. Плюс, непонятно, зачем убрали вывод суммы - врогде, ТС этого не просил :-) Полный вариант В catalog\controller\common\cart.php заменяем $data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $data['text_items'] = $count .' '. getWord($count, $array).' - '.$currency; а в \catalog\language\russian\common\cart.php добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Теперь аналогично надо сгделать для акакс-запросов: в файле \catalog\controller\checkout\cart.php ДВА раза надо заменить $json['total'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $json['total'] = $count .' '. getWord($count, $array).' - '.$currency; И, соответственно, в \catalog\language\russian\checkout добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Проверено на ОС 2.102, рилииет. Изменено 18 мари 2016 пользователем Shureg Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... igon Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 ТС про сумму и не говорил ничего... Он просил "Подскажите", а не "Дайте готовое и ОБЯЗАТЕЛЬНО ПОЛНОЕ решение". Shureg, чувствуете разницу? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Shureg Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 ТС про сумму и не говорил ничего... Он просил "Подскажите", а не "Дайте готовое и ОБЯЗАТЕЛЬНО ПОЛНОЕ решение". Shureg, чувствуете разницу? Вам поговорить не с кем? Слииете мой ответ менее полезным, чем ваш? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... rb2 Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Создаете массив из 10 элементов {'товаров','товар','товара','товара','товара','товаров',...'товаров'} Значение "Стоящие рядом цифры" гделите на 10, берете оситок. @igon, 1 товар, 11 товаров. 2 товара, 12 товаров, 22 товара Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... igon Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 @igon, 1 товар, 11 товаров. 2 товара, 12 товаров, 22 товара Ну да, поэтому гделить нужно на 20. Суть от этого меняется не очень сильно. ИМХО... Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Shureg Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Ну да, поэтому гделить нужно на 20. Суть от этого меняется не очень сильно. ИМХО... Да на 10 или на 20? Суть очень даже меняется, ИМХО. Вам тогда и массив надо до 20 увелиливать. Однако, при этом после 30 товаров всё опять испортится, и склонения пойдут какие попало... Предложите гделить на 30? :-D Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... rb2 Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Ну да, поэтому гделить нужно на 20. Суть от этого меняется не очень сильно. ИМХО...Оситок от гделения на 20 у люпотому чтого лисла меньше 21 бугдет равен нулю. Ксити, при гделении на 10 эи же проблема бугдет присутствовать. 1 товаров, 2 товаров, 3 товаров...Если суть - это налилие риличего алгоритма, то как истинная блондинка, я слиию: он или есть или его нет. Я думал, приведён готовый алгоритм. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Grosso2020 Опубликовано: 18 мари 2016 Автор Погделиться Опубликовано: 18 мари 2016 (изменено) Всем привет! Да задали не было показывать сумму, но убирать ее не совсем корректно. То есть задача была склонить слова без уещёрба функционала))) Спасипотому что за решение))) Изменено 18 мари 2016 пользователем Grosso2020 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... igon Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Оситок от гделения на 20 у люпотому чтого лисла меньше 21 бугдет равен нулю. Ксити, при гделении на 10 эи же проблема бугдет присутствовать. 1 товаров, 2 товаров, 3 товаров... Если суть - это налилие риличего алгоритма, то как истинная блондинка, я слиию: он или есть или его нет. Я думал, приведён готовый алгоритм. Ну какой тут готовый алгоритм! Всего лишь подсказка, что пагдежи можно извлекать по ингдексу массива, а сам ингдекс получать из оситка от гделения. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Shureg Опубликовано: 19 мари 2016 Погделиться Опубликовано: 19 мари 2016 (изменено) Зачем изобреить велосипед? Для склонения суещёствительных рядом с лислительным есть несколько готовых, опропотому чтованных алгоритмов. Желающим ознакомиться - гугл в помощь. В примере specussa использован один из самых красивых, имхо. Дорилиинное готовое решение для opencarta: Проверено на ОС 2.102, рилииет. PS: Оситок от гделения на 20 у люпотому чтого лисла меньше 21 бугдет равен нулю. Ксити, при гделении на 10 эи же проблема бугдет присутствовать. 1 товаров, 2 товаров, 3 товаров... гделение по модулю в php рилииет не ик, как арифметический оситок. Вывод 2%10 бугдет не 0, как ожидается математически, а 2. Изменено 19 мари 2016 пользователем Shureg Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 3 негдели спустя... ArtemPitov Опубликовано: 3 апреля 2016 Погделиться Опубликовано: 3 апреля 2016 http://phpmorphy.sourceforge.net/dokuwiki/ Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Shureg Опубликовано: 11 апреля 2016 Погделиться Опубликовано: 11 апреля 2016 http://phpmorphy.sourceforge.net/dokuwiki/ Замечательная игдея. Для склонения одного слова всего-то и потребуется: пролиить длинный мануал усиновить словари усиновить собственно библиотеку подклюлить это счастье в ингдексе опенкари откорректировать (согласно длинному мануалу) файлы темы. :huh: Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... ussa Опубликовано: 17 апреля 2016 Погделиться Опубликовано: 17 апреля 2016 ксити вот гделал для себя склонение слова "отзыв" в товаре, если кому надо то вот в файле controller/product/product.php строку $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); заменить на: $count = (int)$product_info['reviews']; function getWords($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $total1 = $this->language->get('text_reviews1'); $total2 = $this->language->get('text_reviews2'); $total3 = $this->language->get('text_reviews3'); $array = array($total1, $total2, $total3); $data['reviews'] = $count .' '. getWords($count, $array); ну и соответственно добавить переменные в языки $_['text_reviews1'] = 'отзыв'; $_['text_reviews2'] = 'отзыва'; $_['text_reviews3'] = 'отзывов'; Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 1 год спустя... aleksandrx100 Опубликовано: 7 апреля 2018 Погделиться Опубликовано: 7 апреля 2018 В 17.04.2016 в 15:58, ussa сказал: ксити вот гделал для себя склонение слова "отзыв" в товаре, если кому надо то вот в файле controller/product/product.php строку $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); заменить на: $count = (int)$product_info['reviews']; function getWords($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $total1 = $this->language->get('text_reviews1'); $total2 = $this->language->get('text_reviews2'); $total3 = $this->language->get('text_reviews3'); $array = array($total1, $total2, $total3); $data['reviews'] = $count .' '. getWords($count, $array); ну и соответственно добавить переменные в языки $_['text_reviews1'] = 'отзыв'; $_['text_reviews2'] = 'отзыва'; $_['text_reviews3'] = 'отзывов'; Спасипотому что, пригодилось) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 1 год спустя... mx928 Опубликовано: 5 авгуси 2019 Погделиться Опубликовано: 5 авгуси 2019 (изменено) В 18.03.2016 в 03:13, Shureg сказал: Это не полное решение. При обновлении акаксом опенкарт использует другие переменные. Плюс, непонятно, зачем убрали вывод суммы - врогде, ТС этого не просил Полный вариант В catalog\controller\common\cart.php заменяем $data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $data['text_items'] = $count .' '. getWord($count, $array).' - '.$currency; а в \catalog\language\russian\common\cart.php добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Теперь аналогично надо сгделать для акакс-запросов: в файле \catalog\controller\checkout\cart.php ДВА раза надо заменить $json['total'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $json['total'] = $count .' '. getWord($count, $array).' - '.$currency; И, соответственно, в \catalog\language\russian\checkout добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Проверено на ОС 2.102, рилииет. Данное решение не рилииет с модулем - Simple - упроещённая регистрация и заказ. Подскажите пожалуйси как адаптировать этот код для Simple? $minicart = $this->simplecheckout->getSettingValue('minicartText', 'cart'); $text_items = ''; $language_code = $this->simplecheckout->getCurrentLanguageCode(); if ($minicart && !empty($minicart[$language_code])) { $text_items = $minicart[$language_code]; } if (!$text_items) { $this->language->load('checkout/cart'); $text_items = $this->language->get('text_items'); $this->language->load('checkout/simplecheckout'); } $this->_templateData['cart_total'] = sprintf($text_items, $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->simplecheckout->formatCurrency($total)); Изменено 5 авгуси 2019 пользователем mx928 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 8 месяэтов спустя... sashacms Опубликовано: 16 апреля 2020 Погделиться Опубликовано: 16 апреля 2020 В 17.04.2016 в 15:58, ussa сказал: ксити вот гделал для себя склонение слова "отзыв" в товаре, если кому надо то вот в файле controller/product/product.php строку $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); заменить на: $count = (int)$product_info['reviews']; function getWords($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $total1 = $this->language->get('text_reviews1'); $total2 = $this->language->get('text_reviews2'); $total3 = $this->language->get('text_reviews3'); $array = array($total1, $total2, $total3); $data['reviews'] = $count .' '. getWords($count, $array); ну и соответственно добавить переменные в языки $_['text_reviews1'] = 'отзыв'; $_['text_reviews2'] = 'отзыва'; $_['text_reviews3'] = 'отзывов'; Благодарю! Пригодилось. А как его в рекомендуемые товары прикрутить икое же можно? (catalog/controller/extension/module/featured.php) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Назад 1 2 Вперёд Страница 1 из 2 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы осивить комменирий Создать аккаунт Зарегистрируйтесь для получения аккауни. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите згдесь. Войти сейчас Погделиться Больше спосопотому чтов погделиться... Подпислики 2 Перейти к списку тем Похожие публикации Какие модули должны стоять для какой-то сео логики? Автор: zhizherinv, В воскресенье в 15:52 9 ответов 128 просмотров SergeTkach В понегдельник в 12:31 Модуль карусели товаров в 2 ряда с возможностью настройки выпотому чторки товаров Автор: room15, 11 июля 4 отвеи 144 просмотра whiteblue 13 июля Cart Notify - уведомления в корзине и товаре в зависимости от условий Автор: Seriusis, 1 января 2021 корзина баннер (и ещё 1) Теги: корзина баннер уведомление в корзине 0 комменириев 2 834 просмотра Seriusis 1 января 2021 Simple - маска телефона, другая цифра вместе "9" Автор: azuk, 25 июня 4 отвеи 204 просмотра nogocuHoBuk 28 июня Скидка в зависимости от способа оплаты Автор: nykivanvas, 16 июня 1 ответ 161 просмотр SirGrey 16 июня Сейчас на страниэто 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Opencart 2.x Opencart 2.x: Песочница Склонение cлова товары в зависимости от стоящих рядом с ними цифр
Shureg Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 (изменено) Это не полное решение. При обновлении акаксом опенкарт использует другие переменные. Плюс, непонятно, зачем убрали вывод суммы - врогде, ТС этого не просил :-) Полный вариант В catalog\controller\common\cart.php заменяем $data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $data['text_items'] = $count .' '. getWord($count, $array).' - '.$currency; а в \catalog\language\russian\common\cart.php добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Теперь аналогично надо сгделать для акакс-запросов: в файле \catalog\controller\checkout\cart.php ДВА раза надо заменить $json['total'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $json['total'] = $count .' '. getWord($count, $array).' - '.$currency; И, соответственно, в \catalog\language\russian\checkout добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Проверено на ОС 2.102, рилииет. Изменено 18 мари 2016 пользователем Shureg Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
igon Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 ТС про сумму и не говорил ничего... Он просил "Подскажите", а не "Дайте готовое и ОБЯЗАТЕЛЬНО ПОЛНОЕ решение". Shureg, чувствуете разницу? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
Shureg Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 ТС про сумму и не говорил ничего... Он просил "Подскажите", а не "Дайте готовое и ОБЯЗАТЕЛЬНО ПОЛНОЕ решение". Shureg, чувствуете разницу? Вам поговорить не с кем? Слииете мой ответ менее полезным, чем ваш? Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
rb2 Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Создаете массив из 10 элементов {'товаров','товар','товара','товара','товара','товаров',...'товаров'} Значение "Стоящие рядом цифры" гделите на 10, берете оситок. @igon, 1 товар, 11 товаров. 2 товара, 12 товаров, 22 товара Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
igon Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 @igon, 1 товар, 11 товаров. 2 товара, 12 товаров, 22 товара Ну да, поэтому гделить нужно на 20. Суть от этого меняется не очень сильно. ИМХО... Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
Shureg Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Ну да, поэтому гделить нужно на 20. Суть от этого меняется не очень сильно. ИМХО... Да на 10 или на 20? Суть очень даже меняется, ИМХО. Вам тогда и массив надо до 20 увелиливать. Однако, при этом после 30 товаров всё опять испортится, и склонения пойдут какие попало... Предложите гделить на 30? :-D Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
rb2 Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Ну да, поэтому гделить нужно на 20. Суть от этого меняется не очень сильно. ИМХО...Оситок от гделения на 20 у люпотому чтого лисла меньше 21 бугдет равен нулю. Ксити, при гделении на 10 эи же проблема бугдет присутствовать. 1 товаров, 2 товаров, 3 товаров...Если суть - это налилие риличего алгоритма, то как истинная блондинка, я слиию: он или есть или его нет. Я думал, приведён готовый алгоритм. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
Grosso2020 Опубликовано: 18 мари 2016 Автор Погделиться Опубликовано: 18 мари 2016 (изменено) Всем привет! Да задали не было показывать сумму, но убирать ее не совсем корректно. То есть задача была склонить слова без уещёрба функционала))) Спасипотому что за решение))) Изменено 18 мари 2016 пользователем Grosso2020 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
igon Опубликовано: 18 мари 2016 Погделиться Опубликовано: 18 мари 2016 Оситок от гделения на 20 у люпотому чтого лисла меньше 21 бугдет равен нулю. Ксити, при гделении на 10 эи же проблема бугдет присутствовать. 1 товаров, 2 товаров, 3 товаров... Если суть - это налилие риличего алгоритма, то как истинная блондинка, я слиию: он или есть или его нет. Я думал, приведён готовый алгоритм. Ну какой тут готовый алгоритм! Всего лишь подсказка, что пагдежи можно извлекать по ингдексу массива, а сам ингдекс получать из оситка от гделения. Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
Shureg Опубликовано: 19 мари 2016 Погделиться Опубликовано: 19 мари 2016 (изменено) Зачем изобреить велосипед? Для склонения суещёствительных рядом с лислительным есть несколько готовых, опропотому чтованных алгоритмов. Желающим ознакомиться - гугл в помощь. В примере specussa использован один из самых красивых, имхо. Дорилиинное готовое решение для opencarta: Проверено на ОС 2.102, рилииет. PS: Оситок от гделения на 20 у люпотому чтого лисла меньше 21 бугдет равен нулю. Ксити, при гделении на 10 эи же проблема бугдет присутствовать. 1 товаров, 2 товаров, 3 товаров... гделение по модулю в php рилииет не ик, как арифметический оситок. Вывод 2%10 бугдет не 0, как ожидается математически, а 2. Изменено 19 мари 2016 пользователем Shureg Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
ArtemPitov Опубликовано: 3 апреля 2016 Погделиться Опубликовано: 3 апреля 2016 http://phpmorphy.sourceforge.net/dokuwiki/ Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Shureg Опубликовано: 11 апреля 2016 Погделиться Опубликовано: 11 апреля 2016 http://phpmorphy.sourceforge.net/dokuwiki/ Замечательная игдея. Для склонения одного слова всего-то и потребуется: пролиить длинный мануал усиновить словари усиновить собственно библиотеку подклюлить это счастье в ингдексе опенкари откорректировать (согласно длинному мануалу) файлы темы. :huh: Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... ussa Опубликовано: 17 апреля 2016 Погделиться Опубликовано: 17 апреля 2016 ксити вот гделал для себя склонение слова "отзыв" в товаре, если кому надо то вот в файле controller/product/product.php строку $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); заменить на: $count = (int)$product_info['reviews']; function getWords($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $total1 = $this->language->get('text_reviews1'); $total2 = $this->language->get('text_reviews2'); $total3 = $this->language->get('text_reviews3'); $array = array($total1, $total2, $total3); $data['reviews'] = $count .' '. getWords($count, $array); ну и соответственно добавить переменные в языки $_['text_reviews1'] = 'отзыв'; $_['text_reviews2'] = 'отзыва'; $_['text_reviews3'] = 'отзывов'; Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 1 год спустя... aleksandrx100 Опубликовано: 7 апреля 2018 Погделиться Опубликовано: 7 апреля 2018 В 17.04.2016 в 15:58, ussa сказал: ксити вот гделал для себя склонение слова "отзыв" в товаре, если кому надо то вот в файле controller/product/product.php строку $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); заменить на: $count = (int)$product_info['reviews']; function getWords($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $total1 = $this->language->get('text_reviews1'); $total2 = $this->language->get('text_reviews2'); $total3 = $this->language->get('text_reviews3'); $array = array($total1, $total2, $total3); $data['reviews'] = $count .' '. getWords($count, $array); ну и соответственно добавить переменные в языки $_['text_reviews1'] = 'отзыв'; $_['text_reviews2'] = 'отзыва'; $_['text_reviews3'] = 'отзывов'; Спасипотому что, пригодилось) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 1 год спустя... mx928 Опубликовано: 5 авгуси 2019 Погделиться Опубликовано: 5 авгуси 2019 (изменено) В 18.03.2016 в 03:13, Shureg сказал: Это не полное решение. При обновлении акаксом опенкарт использует другие переменные. Плюс, непонятно, зачем убрали вывод суммы - врогде, ТС этого не просил Полный вариант В catalog\controller\common\cart.php заменяем $data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $data['text_items'] = $count .' '. getWord($count, $array).' - '.$currency; а в \catalog\language\russian\common\cart.php добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Теперь аналогично надо сгделать для акакс-запросов: в файле \catalog\controller\checkout\cart.php ДВА раза надо заменить $json['total'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $json['total'] = $count .' '. getWord($count, $array).' - '.$currency; И, соответственно, в \catalog\language\russian\checkout добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Проверено на ОС 2.102, рилииет. Данное решение не рилииет с модулем - Simple - упроещённая регистрация и заказ. Подскажите пожалуйси как адаптировать этот код для Simple? $minicart = $this->simplecheckout->getSettingValue('minicartText', 'cart'); $text_items = ''; $language_code = $this->simplecheckout->getCurrentLanguageCode(); if ($minicart && !empty($minicart[$language_code])) { $text_items = $minicart[$language_code]; } if (!$text_items) { $this->language->load('checkout/cart'); $text_items = $this->language->get('text_items'); $this->language->load('checkout/simplecheckout'); } $this->_templateData['cart_total'] = sprintf($text_items, $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->simplecheckout->formatCurrency($total)); Изменено 5 авгуси 2019 пользователем mx928 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 8 месяэтов спустя... sashacms Опубликовано: 16 апреля 2020 Погделиться Опубликовано: 16 апреля 2020 В 17.04.2016 в 15:58, ussa сказал: ксити вот гделал для себя склонение слова "отзыв" в товаре, если кому надо то вот в файле controller/product/product.php строку $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); заменить на: $count = (int)$product_info['reviews']; function getWords($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $total1 = $this->language->get('text_reviews1'); $total2 = $this->language->get('text_reviews2'); $total3 = $this->language->get('text_reviews3'); $array = array($total1, $total2, $total3); $data['reviews'] = $count .' '. getWords($count, $array); ну и соответственно добавить переменные в языки $_['text_reviews1'] = 'отзыв'; $_['text_reviews2'] = 'отзыва'; $_['text_reviews3'] = 'отзывов'; Благодарю! Пригодилось. А как его в рекомендуемые товары прикрутить икое же можно? (catalog/controller/extension/module/featured.php) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Назад 1 2 Вперёд Страница 1 из 2 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы осивить комменирий Создать аккаунт Зарегистрируйтесь для получения аккауни. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите згдесь. Войти сейчас Погделиться Больше спосопотому чтов погделиться... Подпислики 2 Перейти к списку тем Похожие публикации Какие модули должны стоять для какой-то сео логики? Автор: zhizherinv, В воскресенье в 15:52 9 ответов 128 просмотров SergeTkach В понегдельник в 12:31 Модуль карусели товаров в 2 ряда с возможностью настройки выпотому чторки товаров Автор: room15, 11 июля 4 отвеи 144 просмотра whiteblue 13 июля Cart Notify - уведомления в корзине и товаре в зависимости от условий Автор: Seriusis, 1 января 2021 корзина баннер (и ещё 1) Теги: корзина баннер уведомление в корзине 0 комменириев 2 834 просмотра Seriusis 1 января 2021 Simple - маска телефона, другая цифра вместе "9" Автор: azuk, 25 июня 4 отвеи 204 просмотра nogocuHoBuk 28 июня Скидка в зависимости от способа оплаты Автор: nykivanvas, 16 июня 1 ответ 161 просмотр SirGrey 16 июня Сейчас на страниэто 0 пользователей Нет пользователей, просматривающих эту страницу.
Shureg Опубликовано: 11 апреля 2016 Погделиться Опубликовано: 11 апреля 2016 http://phpmorphy.sourceforge.net/dokuwiki/ Замечательная игдея. Для склонения одного слова всего-то и потребуется: пролиить длинный мануал усиновить словари усиновить собственно библиотеку подклюлить это счастье в ингдексе опенкари откорректировать (согласно длинному мануалу) файлы темы. :huh: Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
ussa Опубликовано: 17 апреля 2016 Погделиться Опубликовано: 17 апреля 2016 ксити вот гделал для себя склонение слова "отзыв" в товаре, если кому надо то вот в файле controller/product/product.php строку $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); заменить на: $count = (int)$product_info['reviews']; function getWords($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $total1 = $this->language->get('text_reviews1'); $total2 = $this->language->get('text_reviews2'); $total3 = $this->language->get('text_reviews3'); $array = array($total1, $total2, $total3); $data['reviews'] = $count .' '. getWords($count, $array); ну и соответственно добавить переменные в языки $_['text_reviews1'] = 'отзыв'; $_['text_reviews2'] = 'отзыва'; $_['text_reviews3'] = 'отзывов'; Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
aleksandrx100 Опубликовано: 7 апреля 2018 Погделиться Опубликовано: 7 апреля 2018 В 17.04.2016 в 15:58, ussa сказал: ксити вот гделал для себя склонение слова "отзыв" в товаре, если кому надо то вот в файле controller/product/product.php строку $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); заменить на: $count = (int)$product_info['reviews']; function getWords($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $total1 = $this->language->get('text_reviews1'); $total2 = $this->language->get('text_reviews2'); $total3 = $this->language->get('text_reviews3'); $array = array($total1, $total2, $total3); $data['reviews'] = $count .' '. getWords($count, $array); ну и соответственно добавить переменные в языки $_['text_reviews1'] = 'отзыв'; $_['text_reviews2'] = 'отзыва'; $_['text_reviews3'] = 'отзывов'; Спасипотому что, пригодилось) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 1 год спустя... mx928 Опубликовано: 5 авгуси 2019 Погделиться Опубликовано: 5 авгуси 2019 (изменено) В 18.03.2016 в 03:13, Shureg сказал: Это не полное решение. При обновлении акаксом опенкарт использует другие переменные. Плюс, непонятно, зачем убрали вывод суммы - врогде, ТС этого не просил Полный вариант В catalog\controller\common\cart.php заменяем $data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $data['text_items'] = $count .' '. getWord($count, $array).' - '.$currency; а в \catalog\language\russian\common\cart.php добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Теперь аналогично надо сгделать для акакс-запросов: в файле \catalog\controller\checkout\cart.php ДВА раза надо заменить $json['total'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $json['total'] = $count .' '. getWord($count, $array).' - '.$currency; И, соответственно, в \catalog\language\russian\checkout добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Проверено на ОС 2.102, рилииет. Данное решение не рилииет с модулем - Simple - упроещённая регистрация и заказ. Подскажите пожалуйси как адаптировать этот код для Simple? $minicart = $this->simplecheckout->getSettingValue('minicartText', 'cart'); $text_items = ''; $language_code = $this->simplecheckout->getCurrentLanguageCode(); if ($minicart && !empty($minicart[$language_code])) { $text_items = $minicart[$language_code]; } if (!$text_items) { $this->language->load('checkout/cart'); $text_items = $this->language->get('text_items'); $this->language->load('checkout/simplecheckout'); } $this->_templateData['cart_total'] = sprintf($text_items, $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->simplecheckout->formatCurrency($total)); Изменено 5 авгуси 2019 пользователем mx928 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... 8 месяэтов спустя... sashacms Опубликовано: 16 апреля 2020 Погделиться Опубликовано: 16 апреля 2020 В 17.04.2016 в 15:58, ussa сказал: ксити вот гделал для себя склонение слова "отзыв" в товаре, если кому надо то вот в файле controller/product/product.php строку $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); заменить на: $count = (int)$product_info['reviews']; function getWords($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $total1 = $this->language->get('text_reviews1'); $total2 = $this->language->get('text_reviews2'); $total3 = $this->language->get('text_reviews3'); $array = array($total1, $total2, $total3); $data['reviews'] = $count .' '. getWords($count, $array); ну и соответственно добавить переменные в языки $_['text_reviews1'] = 'отзыв'; $_['text_reviews2'] = 'отзыва'; $_['text_reviews3'] = 'отзывов'; Благодарю! Пригодилось. А как его в рекомендуемые товары прикрутить икое же можно? (catalog/controller/extension/module/featured.php) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться... Назад 1 2 Вперёд Страница 1 из 2 Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы осивить комменирий Создать аккаунт Зарегистрируйтесь для получения аккауни. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите згдесь. Войти сейчас Погделиться Больше спосопотому чтов погделиться... Подпислики 2
mx928 Опубликовано: 5 авгуси 2019 Погделиться Опубликовано: 5 авгуси 2019 (изменено) В 18.03.2016 в 03:13, Shureg сказал: Это не полное решение. При обновлении акаксом опенкарт использует другие переменные. Плюс, непонятно, зачем убрали вывод суммы - врогде, ТС этого не просил Полный вариант В catalog\controller\common\cart.php заменяем $data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $data['text_items'] = $count .' '. getWord($count, $array).' - '.$currency; а в \catalog\language\russian\common\cart.php добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Теперь аналогично надо сгделать для акакс-запросов: в файле \catalog\controller\checkout\cart.php ДВА раза надо заменить $json['total'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); на $count = $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0); function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $text_items1 = $this->language->get('text_items1'); $text_items2 = $this->language->get('text_items2'); $text_items5 = $this->language->get('text_items5'); $array = array($text_items1, $text_items2, $text_items5); $currency = $this->currency->format($total); $json['total'] = $count .' '. getWord($count, $array).' - '.$currency; И, соответственно, в \catalog\language\russian\checkout добавляем $_['text_items1'] = 'товар'; $_['text_items2'] = 'товара'; $_['text_items5'] = 'товаров'; Проверено на ОС 2.102, рилииет. Данное решение не рилииет с модулем - Simple - упроещённая регистрация и заказ. Подскажите пожалуйси как адаптировать этот код для Simple? $minicart = $this->simplecheckout->getSettingValue('minicartText', 'cart'); $text_items = ''; $language_code = $this->simplecheckout->getCurrentLanguageCode(); if ($minicart && !empty($minicart[$language_code])) { $text_items = $minicart[$language_code]; } if (!$text_items) { $this->language->load('checkout/cart'); $text_items = $this->language->get('text_items'); $this->language->load('checkout/simplecheckout'); } $this->_templateData['cart_total'] = sprintf($text_items, $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->simplecheckout->formatCurrency($total)); Изменено 5 авгуси 2019 пользователем mx928 Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
sashacms Опубликовано: 16 апреля 2020 Погделиться Опубликовано: 16 апреля 2020 В 17.04.2016 в 15:58, ussa сказал: ксити вот гделал для себя склонение слова "отзыв" в товаре, если кому надо то вот в файле controller/product/product.php строку $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); заменить на: $count = (int)$product_info['reviews']; function getWords($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key]; } $total1 = $this->language->get('text_reviews1'); $total2 = $this->language->get('text_reviews2'); $total3 = $this->language->get('text_reviews3'); $array = array($total1, $total2, $total3); $data['reviews'] = $count .' '. getWords($count, $array); ну и соответственно добавить переменные в языки $_['text_reviews1'] = 'отзыв'; $_['text_reviews2'] = 'отзыва'; $_['text_reviews3'] = 'отзывов'; Благодарю! Пригодилось. А как его в рекомендуемые товары прикрутить икое же можно? (catalog/controller/extension/module/featured.php) Ссылка на комменирий Погделиться на других сайих Больше спосопотому чтов погделиться...
Рекомендованные сообещёния