[Решено] Товары с ценой "0" в конец списка

Установка, ошибки при работе с модулями, интеграции и прочее
brooks
Сообщения: 31
Зарегистрирован: 18.02.2023
Поблагодарил: 12 раз
Спасибо: 2 раз

[Решено] Товары с ценой "0" в конец списка

Непрочитанное сообщение brooks »

Привет, форумчане!
OCStore 3, как в категориях перенести в конец списка, товары, у которых цена = 0? Наверняка, кто-то делал такое.
Последний раз редактировалось brooks 05 мар 2023, 12:00, всего редактировалось 1 раз.
Аватара пользователя
devimirochnik
Разработчик дополнений
Сообщения: 164
Зарегистрирован: 14.04.2022
Откуда: Россия
Мои дополнения: devimirochnik
Поблагодарил: 2 раз
Спасибо: 10 раз

Re: Товары с ценой "0" в конец списка

Непрочитанное сообщение devimirochnik »

Вот, например, модуль - https://liveopencart.ru/opencart-moduli ... sortirovka
Мои модули: Оптимизация, SEO, Скидки, Отчёты и прочее

Также могу заняться задачами по вашему сайту в рамках фриланса. График ненормированный, но дело делаю.
brooks
Сообщения: 31
Зарегистрирован: 18.02.2023
Поблагодарил: 12 раз
Спасибо: 2 раз

Re: Товары с ценой "0" в конец списка

Непрочитанное сообщение brooks »

devimirochnik писал(а): 26 фев 2023, 17:31 Вот, например, модуль - https://liveopencart.ru/opencart-moduli ... sortirovka

Благодарю, видел. Слишком много всего. Нужно только то, что я написал. Есть ли еще варианты?
Аватара пользователя
Tom
Разработчик дополнений
Сообщения: 119
Зарегистрирован: 10.03.2022
Откуда: Казахстан - Алматы
Поблагодарил: 5 раз
Спасибо: 59 раз

Re: Товары с ценой "0" в конец списка

Непрочитанное сообщение Tom »

catalog\model\catalog\product.php
Найти :

Код: Выделить всё

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

Заменить на :

Код: Выделить всё

		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";
		}
Если в магазине есть фильтр подменяющий собой логику вывода товаров или некий модификатор, для тех же целей, вероятнее всего получите 500 ошибку. Решение исключительно для дефолтного опенкарт.
 
brooks
Сообщения: 31
Зарегистрирован: 18.02.2023
Поблагодарил: 12 раз
Спасибо: 2 раз

Re: Товары с ценой "0" в конец списка

Непрочитанное сообщение brooks »

Tom писал(а): 27 фев 2023, 07:12 Если в магазине есть фильтр подменяющий собой логику вывода товаров или некий модификатор, для тех же целей, вероятнее всего получите 500 ошибку. Решение исключительно для дефолтного опенкарт.

Благодарю, Вас. Не смотря на ваши предостережения на свой страх и риск попробовал на ocStore 3.0.3.7 с шаблоном Frame и фильтром OCFilter. Ваше решение помогло.
Ответить