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

Товары с нулевой стоимостью вниз списка


Recommended Posts

День добрый! Подскажите, как можно изменить функцию сортировки, чтобы он товары с нулевой стоимостью всегда помещал вниз списка?

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

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

День добрый! Подскажите, как можно изменить функцию сортировки, чтобы он товары с нулевой стоимостью всегда помещал вниз списка?

p.price=0 перед остальной сортировкой

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

Только что, spectre сказал:

p.price=0 перед остальной сортировкой

Пробовал следующим образом:

if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
            if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
                $sql .= " ORDER BY price = 0, price DESC, LCASE(" . $data['sort'] . ")";
            } elseif ($data['sort'] == 'p.price') {
                $sql .= " ORDER BY price = 0, price DESC, (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
            } else {
                $sql .= " ORDER BY price = 0, price DESC," . $data['sort'];
            }
        } else {
            $sql .= " ORDER BY price = 0, price DESC, p.sort_order";   
        }

Не сработало

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

Только что, Leingard сказал:

Сортируйте по цене

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

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

Сделайте 2 функции вывода товаров категории. В первой в WHERE укажите p.price > 0, во втором, где p.price == 0. В контроллере в 2 цикла, на фронте аналогично. Но тогда нужно будет подумать на счет пагинации. 

Или 2-ой вариант. Ничего в модельке не переделываем, когда получаем из getProducts в result. Извлекаем из массива в цикле товары где price == 0 (до переменной $price) и помещаем и их в конец (array_push).

 

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

25 минут назад, sergei5770 сказал:

Пробовал следующим образом:


if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
            if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
                $sql .= " ORDER BY price = 0, price DESC, LCASE(" . $data['sort'] . ")";
            } elseif ($data['sort'] == 'p.price') {
                $sql .= " ORDER BY price = 0, price DESC, (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
            } else {
                $sql .= " ORDER BY price = 0, price DESC," . $data['sort'];
            }
        } else {
            $sql .= " ORDER BY price = 0, price DESC, p.sort_order";   
        }

Не сработало

 

price = 0, price DESC,

 

конечно не сработало

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

16 часов назад, spectre сказал:

 

price = 0, price DESC,

 

конечно не сработало

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

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

16 часов назад, Leingard сказал:

Сделайте 2 функции вывода товаров категории. В первой в WHERE укажите p.price > 0, во втором, где p.price == 0. В контроллере в 2 цикла, на фронте аналогично. Но тогда нужно будет подумать на счет пагинации. 

Или 2-ой вариант. Ничего в модельке не переделываем, когда получаем из getProducts в result. Извлекаем из массива в цикле товары где price == 0 (до переменной $price) и помещаем и их в конец (array_push).

 

спасибо, попробую

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

Может кто подскажет, попробовал сделать следующей конструкцией:

if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
			if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
				$sql .= " ORDER BY (p.price>0) DESC, LCASE(" . $data['sort'] . ")";
			} elseif ($data['sort'] == 'p.price') {
				$sql .= " ORDER BY (p.price>0) DESC, (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
			} else {
				$sql .= " ORDER BY (p.price>0) DESC," . $data['sort'];
			}
		} else {
			$sql .= " ORDER BY (p.price>0) DESC, p.sort_order";	
		}

Но, как всегда, не помогло, не надо писать про кеши модификаторов, все обновил уже раз сто.

У меня параллельно стоит Brainy Filter, есть подозрение, что это он подливает масла в огонь, вопрос такой, что нибудь сталкивался с Brainy Filter, может кто-то знает где в нем какие условия для сортировки прописываются?

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

  • 2 years later...
В 25.01.2018 в 16:59, sergei5770 сказал:

У меня параллельно стоит Brainy Filter

Добрый день, у меня аналогичная ситуация, ocstore 2.3 и стоит Brainy Filter.
Редактировал catalog/model/catalog/product.php
Мне нужно было сделать товар с ценой 0 в конце списка, сортировка по умолчанию - по возрастанию цены.
Сделал в
методе getProducts() следующее:

if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
			if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
				$sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")";
			} elseif ($data['sort'] == 'p.price') {
				$sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
			} else {
				$sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort'];
			}
		} else {
			$sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order";
		}

работает только в том случае, если отключен Brainy Filter.
Получается, что BF модифицирует getProducts()
Что нужно сделать, чтобы товары с ценой 0 подвинуть в конец списка и при этом сохранить работу фильтра?

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


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

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

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

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

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

Вхід

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

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

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

×
×
  • Створити...

Important Information

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