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

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


Recommended Posts

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

 

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

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

Link to post
Share on other sites

15 минут назад, Waskadagama сказал:

Не подойдёт?


Наверное не пойдет

Link to post
Share on other sites

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

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

 

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

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

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

Модуль есть

Link to post
Share on other sites

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

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

Модуль есть

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

Edited by Seofisher
Link to post
Share on other sites

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 — сначала старые потом новые.

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

Link to post
Share on other sites

Вроде ж понятно написал задачу
Товары у которого quantity=0 и stock_status_id=1 идут перед товарами у которых quantity=0 и stock_status_id=2

Link to post
Share on other sites

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

..

Edited by kwakin
Link to post
Share on other sites

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()) , чтобы получился подобный запрос, думаю, сами догадаетесь.

Edited by searchingman
  • +1 2
Link to post
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
  • Recently Browsing   0 members

    No registered users viewing this page.

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