Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

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


Рекомендованные сообщения

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

 

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

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

Ссылка на комментарий
Поделиться на других сайтах


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

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

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

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

Ссылка на комментарий
Поделиться на других сайтах

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

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

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

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

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

Ссылка на комментарий
Поделиться на других сайтах


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

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

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

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

Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.