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

Сортировка товаров в категории


Recommended Posts

Требуется помощь.
В model/product.php для getProducts нужно дописать условие для групgировки и сортировки товаров, сам разобраться не могу. Не очень понимаю как применить GROUP BY и все это правильно записать.

 

Задача:
Товары у которых quantity=0 идут в конец списка

Товары у которого quantity=0 и stock_status_id=1 идут перед товарами у которых quantity=0 и stock_status_id=2

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


1 час назад, s89 сказал:

Требуется помощь.
В model/product.php для getProducts нужно дописать условие для групgировки и сортировки товаров, сам разобраться не могу. Не очень понимаю как применить GROUP BY и все это правильно записать.

 

Задача:
Товары у которых quantity=0 идут в конец списка

Товары у которого quantity=0 и stock_status_id=1 идут перед товарами у которых quantity=0 и stock_status_id=2

товыры нет в наличии в конец списка

Модуль есть

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


26 минут назад, KomissarJuve сказал:

товыры нет в наличии в конец списка

Модуль есть

вопрос же в другом

Змінено користувачем Seofisher
Надіслати
Поділитися на інших сайтах

24 минуты назад, KomissarJuve сказал:

товыры нет в наличии в конец списка

Модуль есть

Сортировка opencart в категории по умолчанию. Что бы сменить сортировку товара в категории, идем сюда:
/catalog/controller/product/category.php

Находим строчку:

$sort = 'p.sort_order';

Сортировка opencart

В этой строчке меняем ‘p.sort_order’ на нужный вариант:

Виды сортировок
‘pd.name‘, — сортировка по имени.
‘p.model‘, — сортировка по модели.
‘p.quantity‘, — сортировка по количеству.
‘p.price‘, — сортировка по цене.
‘rating‘, — сортировка по рейтингу.
‘p.sort_order‘, — сортировка, которая стоит по умолчанию.
‘p.date_added‘ — сортировка по дате добавления.

Что бы изменить порядок (убывание/возрастание), меняем

$order = 'ASC';

 

где DESC — сначала новые, потом старые,
а ASC — сначала старые потом новые.

После изменения не забываем чистить кеш!

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


6 часов назад, s89 сказал:

Требуется помощь.
В model/product.php для getProducts нужно дописать условие для групgировки и сортировки товаров, сам разобраться не могу. Не очень понимаю как применить GROUP BY и все это правильно записать.

 

Задача:
Товары у которых quantity=0 идут в конец списка

Товары у которого quantity=0 и stock_status_id=1 идут перед товарами у которых quantity=0 и stock_status_id=2

Можно использовать CASE в запросе для своего усложненного порядка сортировки. Н-р, для ocStore 2.3.0.2.3 примерный итоговый запрос на странице категорий. 

SELECT p.product_id, -- p.quantity, p.stock_status_id, -- для отладки по условиям
CASE 
	WHEN p.quantity = 0 AND  p.stock_status_id = 1 THEN 1
	WHEN  p.quantity = 0 AND  p.stock_status_id = 2 THEN 2
	ELSE 0
END AS my_sort,
	(SELECT AVG(rating) AS total 
	FROM oc_review r1 
	WHERE r1.product_id = p.product_id AND r1.status = '1' 
	GROUP BY r1.product_id) AS rating, 
	(SELECT price 
		FROM oc_product_discount pd2 
		WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '1' AND pd2.quantity = '1' 
		AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) 
		AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) 
		ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, 
	(SELECT price FROM oc_product_special ps 
		WHERE ps.product_id = p.product_id AND ps.customer_group_id = '1' 
		AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) 
		AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) 
		ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special 
	FROM oc_product_to_category p2c 
		LEFT JOIN oc_product p ON (p2c.product_id = p.product_id) 
		LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) 
		LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id) 
		WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() 
		AND p2s.store_id = '0' AND p2c.category_id = '28' 
	GROUP BY p.product_id 
	ORDER BY my_sort, -- добавляем нашу сортировку перед стандартными
	p.sort_order ASC, LCASE(pd.name) ASC LIMIT 0,15

В итоге товары в категории идут сначала с остатком, т.е.  quantity<>0  -> затем с условием quantity=0 и stock_status_id=1 -> затем с условием quantity=0 и stock_status_id=2

Что прописать в catalog\model\catalog\product.php в  public function getProducts($data = array()) , чтобы получился подобный запрос, думаю, сами догадаетесь.

Змінено користувачем searchingman
  • +1 2
Надіслати
Поділитися на інших сайтах


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

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

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

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

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

Вхід

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

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

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