Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

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

 

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

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

Надіслати
Поділитися на інших сайтах


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

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

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

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

Надіслати
Поділитися на інших сайтах

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

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

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

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

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

Надіслати
Поділитися на інших сайтах


Всё просто. Раз корзина у нас находится по адресу /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
Надіслати
Поділитися на інших сайтах

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

Всё просто. Раз корзина у нас находится по адресу /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'] для сравнения в цикле, который я упоминал в самом начале

 

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

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

 

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

Важно!

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

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

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

Надіслати
Поділитися на інших сайтах


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

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

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

Надіслати
Поділитися на інших сайтах


  • 4 years later...

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.