Перейти к содержанию
sergei5770

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

Рекомендуемые сообщения

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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, может кто-то знает где в нем какие условия для сортировки прописываются?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.