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

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


Recommended Posts

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

 

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

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

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


  В 20.04.2021 в 12:38, s89 сказав:

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

 

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

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

Expand  

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

Модуль есть

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


  В 20.04.2021 в 13:43, KomissarJuve сказав:

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

Модуль есть

Expand  

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

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

  В 20.04.2021 в 13:43, KomissarJuve сказав:

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

Модуль есть

Expand  

Сортировка 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
Надіслати
Поділитися на інших сайтах


  В 20.04.2021 в 12:38, s89 сказав:

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

 

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

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

Expand  

Можно использовать 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 і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.