Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

Recommended Posts

Здравствуйте. Подскажите пожалуйста, можно ли в списке отложенных товаров в корзине упорядочить их по категориям, например:

 

Категория "Мебель": заказаны стул, стол, шкаф

Категория "Электроника": заказаны удлинитель, розетка.

Link to post
Share on other sites

в списке отложенных товаров в корзине

Вы имеете в виду просто список товаров в корзине? Где должно делиться по категориям? Только на странице корзины или в выпадающей корзине в шапке тоже?

Имеются ли подкатегории на сайте? То есть к примеру мебель->кухонная мебель

А вообще - сделать можно :)

Link to post
Share on other sites

в списке отложенных товаров в корзине

Вы имеете в виду просто список товаров в корзине? Где должно делиться по категориям? Только на странице корзины или в выпадающей корзине в шапке тоже?

Имеются ли подкатегории на сайте? То есть к примеру мебель->кухонная мебель

А вообще - сделать можно :)

Да, категории имеются: "Комплектация", "Мебель", "Прочие", "Спецодежда", "Электрика", "Картриджи", "Канцтовары", "Бытовая техника", "Инструмент". Получается, только на странице корзины заказчик просит. Буду благодарен, если подскажете как? Мне этот установленный магазин достался по наследству недоработанный, пока ещё не очень понимаю, что за что отвечает тут...

Link to post
Share on other sites

Всё просто. Раз корзина у нас находится по адресу /index.php?route=checkout/cart

То вероятнее всего за её генерацию(хз как назвать) отвечает файл контроллера cart.php, находящийся в папке checkout

Что ж, идём его искать. Нашли по ожидаемому адресу  \catalog\controller\checkout\cart.php

 

Ищем в нём строку

$products = $this->cart->getProducts(); 

и обращаем на неё внимание :) Именно тут вызывается функция из модели, которая достаёт параметры/характеристики/цены/etc для товаров находящихся в корзине.

А дальше всё вообще просто. Следом у нас идёт цикл, перебирающий и проверяющий все товары из корзины. Именно в него и нужно встроить проверку на совпадение родительских категорий. Каким образом вы их сгруппируете - дело ваше.

Только у товаров тут категории сейчас не указаны. Вернёмся к функции  getProducts(). Она находится в файле \system\library\cart.php

Находим 

$product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.date_available <= NOW() AND p.status = '1'");

 

И заменяем на 

$product_query = $this->db->query("SELECT *, cd.name as category_name FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_category ptc ON (ptc.product_id=p.product_id) LEFT JOIN " . DB_PREFIX . "category_description cd ON (cd.category_id=ptc.category_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.date_available <= NOW() AND p.status = '1'");

 

тут прошу простить, если допустил ошибку. ночь всё-таки ;)

Далее опускаемся ниже в файле и находим в конце нашей функции getProducts() эту строку.

$this->data[$key] = array(

 

Сюда теперь нужно просто вставить нечто вроде 

'category_name'  => $product_query->row['category_name'],

 

(при желании можно вытаскивать и id категории. возможно по нему сравнивать дальше будет правильнее)

И его смело можно будет использовать как $product['category_name'] для сравнения в цикле, который я упоминал в самом начале

 

Надеюсь ошибок не допустил и написал внятно.

Если нужны комментарии к коду, то могу написать

 

Забыл добавить.

Важно!

Один и тотже товар может в магазине находиться в нескольких категориях.

В этом случае вся ваша затея вообще не имеет смысла. Не будете же вы его дважды в корзине показывать? ;)

Поэтому весь код написан с расчётом на то, что каждый товар относится только к одной категории.

  • +1 1
Link to post
Share on other sites

О, спасибо!!! Сегодня занимался своей основной работой. Завтра обязательно попробую и отпишусь :-)

Всё просто. Раз корзина у нас находится по адресу /index.php?route=checkout/cart

То вероятнее всего за её генерацию(хз как назвать) отвечает файл контроллера cart.php, находящийся в папке checkout

Что ж, идём его искать. Нашли по ожидаемому адресу  \catalog\controller\checkout\cart.php

 

Ищем в нём строку

$products = $this->cart->getProducts(); 

и обращаем на неё внимание :) Именно тут вызывается функция из модели, которая достаёт параметры/характеристики/цены/etc для товаров находящихся в корзине.

А дальше всё вообще просто. Следом у нас идёт цикл, перебирающий и проверяющий все товары из корзины. Именно в него и нужно встроить проверку на совпадение родительских категорий. Каким образом вы их сгруппируете - дело ваше.

Только у товаров тут категории сейчас не указаны. Вернёмся к функции  getProducts(). Она находится в файле \system\library\cart.php

Находим 

$product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.date_available <= NOW() AND p.status = '1'");

 

И заменяем на 

$product_query = $this->db->query("SELECT *, cd.name as category_name FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_category ptc ON (ptc.product_id=p.product_id) LEFT JOIN " . DB_PREFIX . "category_description cd ON (cd.category_id=ptc.category_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.date_available <= NOW() AND p.status = '1'");

 

тут прошу простить, если допустил ошибку. ночь всё-таки ;)

Далее опускаемся ниже в файле и находим в конце нашей функции getProducts() эту строку.

$this->data[$key] = array(

 

Сюда теперь нужно просто вставить нечто вроде 

'category_name'  => $product_query->row['category_name'],

 

(при желании можно вытаскивать и id категории. возможно по нему сравнивать дальше будет правильнее)

И его смело можно будет использовать как $product['category_name'] для сравнения в цикле, который я упоминал в самом начале

 

Надеюсь ошибок не допустил и написал внятно.

Если нужны комментарии к коду, то могу написать

 

Забыл добавить.

Важно!

Один и тотже товар может в магазине находиться в нескольких категориях.

В этом случае вся ваша затея вообще не имеет смысла. Не будете же вы его дважды в корзине показывать? ;)

Поэтому весь код написан с расчётом на то, что каждый товар относится только к одной категории.

Link to post
Share on other sites

Попробовал как вы предложили, теперь такая картинка:

В общем, вместо наименования пишется категория и подсказка при наведении на картинку - также имя категории...

post-667735-0-54715100-1367957223_thumb.png

Link to post
Share on other sites

  • 4 years later...

Здравствуйте.

Подскажите возможно ли данные правки применить к ocstore 2.3.0.2?

Есть задумка показать гостю товар с каких категорий он набрал.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Similar Content

    • By Teron
      750
      Скачать/Купить дополнение


      Скидки в корзине от суммы и количества
      Модуль предоставляет возможность установить следующие скидки:

      1. Скидка в % от определенной суммы товаров в корзине.

      2. Скидка в % от количества товаров в корзине, скидка применяется (на выбор):
      * к самому дешевому товару в корзине
      * к самому дорогому товару в корзине
      * к сумме товаров в корзине

      3. Скидка в % от количества товаров из одной категории в корзине, скидка применяется (на выбор):
      * к самому дешевому товару в корзине
      * к самому дорогому товару в корзине
      * к сумме товаров в корзине

      Дополнительные возможности
      1. Модуль игнорирует товары, на которые уже действует скидка, например акции, позволяя избежать суммирования скидок.

      2. Возможность выбора приоритета скидок, например, если совпадают одновременно условия скидки от суммы товаров в корзине и скидки от количества товаров, сработает только одна из скидок, приоритет которой выбран в настройках модуля, позволяя избежать суммирования скидок.

      3. Возможность выбора групп покупателей, для которых будут доступны скидки.

      4. Скидки рассчитываются только на основании стоимости товаров, стоимость доставки и прочие наценки на сумму скидки не влияют.

      Совместим с simplecheckout.

      Демо
      Сайт: http://demo1.myocart.ru
      Админка: http://demo1.myocart.ru/admin
      логин: demo
      пароль: demo
      Добавил Teron Добавлено 28.09.2020 Категория Учет в заказе Системные требования Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3 ocStore 3.0
      2.3 OpenCart.Pro, ocShop Обращение к серверу разработчика Нет  
    • By ALEXROS
      Как изменить вес в корзине с (1.50 кг) на (1.502 кг)?
      Нужно, чтобы граммы тоже отображались.
    • By disclap
      Ocstore 2.3
      Установленные модули для заказов: Simple
      Нужно в корзине сгруппировать товары по полю (location) или "Производители"  
      Подойдет даже визуально в корзине ($products = $this->cart->getProducts(); ) что б клиент видел что товары на разных складах.
      Пишите в ЛС если непонятно будем разбирать индивидуально.
    • By Seriusis
      900 13
      Скачать/Купить дополнение


      Cart Notify - уведомления в корзине и товаре в зависимости от условий
      Модуль позволяет создать неограниченное количество уведомлений с текстом, html + добавить баннер на странице корзины, оформления заказа в зависимости от товаров корзины, производителя, категории, покупателя, суммы корзины. Дополнительно модуль можно выводить в товаре.
       
      ВОЗМОЖНОСТИ
      Вывод в позицию в зависимости от:
      производителя товара в корзине категории товара в корзине присутствие конкретного товара в корзине суммы в корзине (больше чем, меньше чем) группы зарегистрированного покупателя авторизирован или гость Вывод на странице товара работает по тем же привязкам, исключая сумму в корзине
       
      ДЕМО
      Добавьте товар в корзину для показа уведомлений
      https://oc23.likedev.pro/iphone 
      Админка https://oc23.likedev.pro/admin/   логин/пароль: demo/demo
       
      ОСОБЕННОСТИ
      нет ограничений для количества условий.  можно создавать разные условия для разных групп товаров комбинировать несколько условий мультиязычность поля: название, текст, баннер, ссылка для баннера, статус, размеры изображений, стиль  
      ВАРИАНТЫ ПРИМЕНЕНИЯ
      вывод важной информации для определенных групп товаров при покупке вывод информации о скидках, предложениях, подарках и т.д. вывод простых баннеров в корзине или товаре показ купонов, предложений для определенной суммы в корзине показ информации в зависимости от группы покупателя или статуса авторизации  
      ВАЖНО
       Условия работают по принципу "..и..и..", т.е учитываются все выбранные условия одновременно. Чем больше условий - тем меньше выборка.
       Если не выбрать ни одно условие - уведомление будет выводиться всегда.
       Если в корзине присутствует хотя бы один товар по заданным условиям, уведомление будет показано
       
      УСТАНОВКА
       
      видео установки (фикс для oc3 НЕ НУЖЕН)
       
      Через установщик в админке загружаете архив модуля ocmod для своей версии опенкарт. 
      Для версий 2.x убедитесь, что у вас уже установлен модификатор localcopy.ocmod, если его нет - установите.
       
      ЛИЦЕНЗИЯ 
      Лицензия выдается на один домен. Также при необходимости на тестовый поддомен.
      Теперь ключ будет выслан автоматически на почту покупателя сразу после вашего заказа. Если по какой-то причине письма нет - пишите на почту seriusisu@gmail.com или в лс.
       
      Приветствую дельные предложения по развитию и расширению модуля.
       
      ПРОСЬБА УКАЗЫВАТЬ ДОМЕН СРАЗУ ПРИ ПОКУПКЕ
       
      Также смотрите модули:
      YouTube lazy load & popup - оптимизация и кастомизация iframe
      Accordion & Tabs & Steps, Faq & HowTo Microdata, any place & content
       

       
       

      Добавил Seriusis Добавлено 01.01.2021 Категория Модули Системные требования Метод активации По запросу в ЛС
      По запросу на почту Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0 ocStore 3.0
      2.3.0.2.4
      2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х Обращение к серверу разработчика Нет  
    • By Seriusis
      Модуль позволяет создать неограниченное количество уведомлений с текстом, html + добавить баннер на странице корзины, оформления заказа в зависимости от товаров корзины, производителя, категории, покупателя, суммы корзины. Дополнительно модуль можно выводить в товаре.
       
      ВОЗМОЖНОСТИ
      Вывод в позицию в зависимости от:
      производителя товара в корзине категории товара в корзине присутствие конкретного товара в корзине суммы в корзине (больше чем, меньше чем) группы зарегистрированного покупателя авторизирован или гость Вывод на странице товара работает по тем же привязкам, исключая сумму в корзине
       
      ДЕМО
      Добавьте товар в корзину для показа уведомлений
      https://oc23.likedev.pro/iphone 
      Админка https://oc23.likedev.pro/admin/   логин/пароль: demo/demo
       
      ОСОБЕННОСТИ
      нет ограничений для количества условий.  можно создавать разные условия для разных групп товаров комбинировать несколько условий мультиязычность поля: название, текст, баннер, ссылка для баннера, статус, размеры изображений, стиль  
      ВАРИАНТЫ ПРИМЕНЕНИЯ
      вывод важной информации для определенных групп товаров при покупке вывод информации о скидках, предложениях, подарках и т.д. вывод простых баннеров в корзине или товаре показ купонов, предложений для определенной суммы в корзине показ информации в зависимости от группы покупателя или статуса авторизации  
      ВАЖНО
       Условия работают по принципу "..и..и..", т.е учитываются все выбранные условия одновременно. Чем больше условий - тем меньше выборка.
       Если не выбрать ни одно условие - уведомление будет выводиться всегда.
       Если в корзине присутствует хотя бы один товар по заданным условиям, уведомление будет показано
       
      УСТАНОВКА
       
      видео установки (фикс для oc3 НЕ НУЖЕН)
       
      Через установщик в админке загружаете архив модуля ocmod для своей версии опенкарт. 
      Для версий 2.x убедитесь, что у вас уже установлен модификатор localcopy.ocmod, если его нет - установите.
       
      ЛИЦЕНЗИЯ 
      Лицензия выдается на один домен. Также при необходимости на тестовый поддомен.
      Теперь ключ будет выслан автоматически на почту покупателя сразу после вашего заказа. Если по какой-то причине письма нет - пишите на почту seriusisu@gmail.com или в лс.
       
      Приветствую дельные предложения по развитию и расширению модуля.
       
      ПРОСЬБА УКАЗЫВАТЬ ДОМЕН СРАЗУ ПРИ ПОКУПКЕ
       
      Также смотрите модули:
      YouTube lazy load & popup - оптимизация и кастомизация iframe
      Accordion & Tabs & Steps, Faq & HowTo Microdata, any place & content
       

       
       

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.