Перейти к содержимому


Фото
* * * * * 1 голосов

Товары с ценой 0 выводить в конце, при сортировке по цене

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

  • Чтобы отвечать, сперва войдите на форум
9 ответов в теме

#1 tom0rrow

tom0rrow
  • Пользователь
  • 76 сообщений
  • Программирование
  • Версия CMS:2.x

Опубликовано 15.12.2013 - 15:52

Ребята, подскажите пожалуйста, как сделать так, чтобы товары у которых цена 0, выводились в конце при сортировке по возростанию.

 

Сейчас же добавил:  

 

$filter['in_stock'] = 1;
 

Но работает он херово, навигация постраничная выводится к примеру страниц 40, а так как товаров с 0-1 ценой нету теперь, то на 20 просто заканчивается вывод, и попадаешь на страницу "товаров нету".  



#2 pavel_wis

pavel_wis
  • Пользователь
  • 56 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 15.12.2013 - 16:17

попробуйте продублировать в функцию count_products, и с панагией проблем не будет

это по этой проблеме.

 

 

А так, для Вашей задачи необходимо редактировать $filter['sort']

 

попробуйте для position поставить такое:

 

$order = '(SELECT pv.price FROM __variants pv WHERE (pv.stock IS NULL OR pv.stock>0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1) DESC';



#3 pavel_wis

pavel_wis
  • Пользователь
  • 56 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 15.12.2013 - 16:20

немного поторопился

Тут запрос больше для наличия:)

 

ну для price, я думаю, Вам не составит труда заменить:)



#4 tom0rrow

tom0rrow
  • Пользователь
  • 76 сообщений
  • Программирование
  • Версия CMS:2.x

Опубликовано 15.12.2013 - 16:35

немного поторопился

Тут запрос больше для наличия :)

 

ну для price, я думаю, Вам не составит труда заменить :)

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



#5 tom0rrow

tom0rrow
  • Пользователь
  • 76 сообщений
  • Программирование
  • Версия CMS:2.x

Опубликовано 15.12.2013 - 16:39

попробуйте продублировать в функцию count_products, и с панагией проблем не будет

это по этой проблеме.

 

 

А так, для Вашей задачи необходимо редактировать $filter['sort']

 

попробуйте для position поставить такое:

 

$order = '(SELECT pv.price FROM __variants pv WHERE (pv.stock IS NULL OR pv.stock>0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1) DESC';

 

то что вы здесь написали в конце, это сортировка по убыванию, по цене... не годится



#6 pavel_wis

pavel_wis
  • Пользователь
  • 56 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 15.12.2013 - 16:53

то что вы здесь написали в конце, это сортировка по убыванию, по цене... не годится

я ж ведь ниже указал:

 

немного поторопился

Тут запрос больше для наличия :)

ну для price, я думаю, Вам не составит труда заменить :)



#7 tom0rrow

tom0rrow
  • Пользователь
  • 76 сообщений
  • Программирование
  • Версия CMS:2.x

Опубликовано 15.12.2013 - 17:03

я ж ведь ниже указал:

 

немного поторопился

Тут запрос больше для наличия :)

ну для price, я думаю, Вам не составит труда заменить :)

Так вы знаете как решить ?



#8 pavel_wis

pavel_wis
  • Пользователь
  • 56 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 15.12.2013 - 17:41

Так, и все таки у меня работает: мы же выбираем pv.price (с наличием товара)

пробуйте, Api\products.php

 

найдите такие стоки

case 'position':
 $order = 'p.position DESC';
 
и ордер замените на
$order = '(SELECT pv.price FROM __variants pv WHERE (pv.stock IS NULL OR pv.stock>0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1) DESC';


#9 Julia-sk

Julia-sk
  • Пользователь
  • 33 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 22.01.2014 - 23:09

А как написать, если без учета наличия товара (есть позиции товара под заказ)?



#10 simpler

simpler
  • Пользователь
  • 49 сообщений
  • Дизайн, Верстка, SEO, Заказчик
  • Версия CMS:2.x
  • Откуда:Omsk

Опубликовано 26.02.2015 - 12:28

Так, и все таки у меня работает: мы же выбираем pv.price (с наличием товара)

пробуйте, Api\products.php

 

найдите такие стоки

case 'position':
 $order = 'p.position DESC';
 
и ордер замените на
$order = '(SELECT pv.price FROM __variants pv WHERE (pv.stock IS NULL OR pv.stock>0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1) DESC';

 

Попробовал этот фрагмент, получается что идет сортировка по цене от большей к меньшей, ну и естественно товары с нулевой ценой оказываются в конце списка, но такой вариант не совсем устраивает, т.к. обычно редко кто-либо сортирует товары начиная с самой дорогой цены.

 

А может есть решение такое - сортировка идет по возврастанию цены, а товары с нулевой ценой попадают в конец списка? Посоветуйте, всю голову сломал...







Также с меткой «сортировка по цене»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых