Модуль Сортировка товаров по цене по возрастанию, но чтобы товары с ценой = 0 (иначе - без цены) были внизу

135

Постоялец
Регистрация
11 Июл 2010
Сообщения
141
Реакции
8
Всем привет. Очень часто люди сталкиваются с проблемой:
нужно отсортировать товары по цене по возрастанию, но чтобы товары с ценой = 0 (иначе - без цены) были внизу списка.
Например, в некоторых интернет-магазинах на таких товарах стоит вывеска "Под заказ" или "Цену уточняйте" или "идёт обновление цены". Как вывести эту табличку по условию, что {product->variant->price==0}, рассказывать не буду, а вот над проблемой перемещения товаров с нулевой ценой бились многие. Так и не сделали.
Я же сделал.
/api/products.php:
Код:
         if(!empty($filter['sort']))
            switch ($filter['sort'])
            {
                case 'position':
                $order = 'p.visible DESC, p.featured DESC, p.position DESC';
                break;
                case 'name':
                $order = 'p.name';
                break;
                case 'created':
                $order = 'p.created DESC';
                break;
                case 'price-max':
                $order = '(SELECT pv.price FROM __variants pv WHERE  p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE product_id=p.id LIMIT 1) LIMIT 1) desc';
                break;
                case 'price-min':
                $order = '(SELECT CASE pv.price WHEN 0 THEN 9999999 ELSE pv.price END FROM __variants pv WHERE p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE product_id=p.id LIMIT 1) LIMIT 1)';
                break;
            }

И если кто знает, поделитесь, пожалуйста, готовыми модулями микроразметки. Больше всего интересует микроразметка категории, отзывов, контактов и статей.
Спасибо.
 

alsporih

Писатель
Регистрация
26 Янв 2018
Сообщения
7
Реакции
0
  • Заблокирован
  • #2
Всем привет. Очень часто люди сталкиваются с проблемой:
нужно отсортировать товары по цене по возрастанию, но чтобы товары с ценой = 0 (иначе - без цены) были внизу списка.
Например, в некоторых интернет-магазинах на таких товарах стоит вывеска "Под заказ" или "Цену уточняйте" или "идёт обновление цены". Как вывести эту табличку по условию, что {product->variant->price==0}, рассказывать не буду, а вот над проблемой перемещения товаров с нулевой ценой бились многие. Так и не сделали.
Я же сделал.
/api/products.php:
Код:
         if(!empty($filter['sort']))
            switch ($filter['sort'])
            {
                case 'position':
                $order = 'p.visible DESC, p.featured DESC, p.position DESC';
                break;
                case 'name':
                $order = 'p.name';
                break;
                case 'created':
                $order = 'p.created DESC';
                break;
                case 'price-max':
                $order = '(SELECT pv.price FROM __variants pv WHERE  p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE product_id=p.id LIMIT 1) LIMIT 1) desc';
                break;
                case 'price-min':
                $order = '(SELECT CASE pv.price WHEN 0 THEN 9999999 ELSE pv.price END FROM __variants pv WHERE p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE product_id=p.id LIMIT 1) LIMIT 1)';
                break;
            }

И если кто знает, поделитесь, пожалуйста, готовыми модулями микроразметки. Больше всего интересует микроразметка категории, отзывов, контактов и статей.
Спасибо.
может подробнее опишите ситуацию) думаю многим полезно будет, спасибо
 

135

Постоялец
Регистрация
11 Июл 2010
Сообщения
141
Реакции
8
Ну а что описывать-то?
Зачастую на сайте мы не указываем цену. Вместо "0.00 руб." в шаблоне выводится "цена по запросу". При сортировке по цене (по возрастанию) сначала будут идти товары с ценой 0, затем - с минимальной и так далее...
Но нам ведь надо, чтобы товары с ценой "по запросу" отображались в конце - вот я и модифицировал запрос. По сути поменялась лишь одна строчка :

$order = '(SELECT CASE pv.price WHEN 0 THEN 9999999 ELSE pv.price END FROM __variants pv WHERE p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE product_id=p.id LIMIT 1) LIMIT 1)';

Суть проста: при сортировке для товаров, цена которых = 0, цена меняется на 9999999, но меняется не для сайта, не для шаблона, а только для определения порядка вывода товаров, на сайте же выводится реальная цена, т.е., ноль. Ну или в моём случае "цена по запросу".
 

alsporih

Писатель
Регистрация
26 Янв 2018
Сообщения
7
Реакции
0
  • Заблокирован
  • #4
Ну а что описывать-то?
Зачастую на сайте мы не указываем цену. Вместо "0.00 руб." в шаблоне выводится "цена по запросу". При сортировке по цене (по возрастанию) сначала будут идти товары с ценой 0, затем - с минимальной и так далее...
Но нам ведь надо, чтобы товары с ценой "по запросу" отображались в конце - вот я и модифицировал запрос. По сути поменялась лишь одна строчка :

$order = '(SELECT CASE pv.price WHEN 0 THEN 9999999 ELSE pv.price END FROM __variants pv WHERE p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE product_id=p.id LIMIT 1) LIMIT 1)';

Суть проста: при сортировке для товаров, цена которых = 0, цена меняется на 9999999, но меняется не для сайта, не для шаблона, а только для определения порядка вывода товаров, на сайте же выводится реальная цена, т.е., ноль. Ну или в моём случае "цена по запросу".
А как прописать 'цена по запросу'? В каком файле
 

135

Постоялец
Регистрация
11 Июл 2010
Сообщения
141
Реакции
8
product.tpl

Заменить
{$product->price} (или $product->variant->price)
на
{if $product->price == 0}Цена по запросу{else}{$product->price}{/if}
 
Сверху