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

Категории товаров в корзине [РЕШЕНО]


Recommended Posts

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

 

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

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

Link to comment
Share on other sites


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

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

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

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

Link to comment
Share on other sites

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

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

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

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

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

Link to comment
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 comment
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 comment
Share on other sites


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

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

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

Link to comment
Share on other sites


  • 4 years later...

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

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

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

Link to comment
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
 Share

×
×
  • 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.