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

Приоритет "В наличии" внутри категории перед "Нет в наличии"


samironov89

Recommended Posts

Добрый день!

Порылся и не нашёл, что искал.

Задача в следующем:

 

Дано:

- есть товар со статусом "В наличии" (он же "На складе"), т.е. товар с остатком >0. И есть товар со статусом "Нет в наличии", т.е. товар с остатком =0.

- скрывать последний из ассртимента нельзя, т.е. он должен висеть на сайте.

Задача:

необходимо настроить сортировку внутри страницы категории таким образом, чтобы сначала отражался товар с остатом >0 (т.е. в наличии), а затем уже товар, которого нет.

 

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

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


catalog/model/catalog/product.php

 

SELECT p.product_id,

Заменить на

SELECT p.product_id, p.quantity>0 as instock,

Далее

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 instock DESC, LCASE(" . $data['sort'] . ")";
	} elseif ($data['sort'] == 'p.price') {
		$sql .= " ORDER BY instock DESC, (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
	} else {
		$sql .= " ORDER BY instock DESC, " . $data['sort'];
	}
} else {
	$sql .= " ORDER BY instock DESC, p.sort_order";
}

Потом обновите кэш модификаторов - Должно сработать. Товары с остатком 0 - будут в конце списка в категориях.

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


В 30.07.2019 в 15:43, Djeff78 сказал:

catalog/model/catalog/product.php

 


SELECT p.product_id,

Заменить на


SELECT p.product_id, p.quantity>0 as instock,

Далее


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 instock DESC, LCASE(" . $data['sort'] . ")";
	} elseif ($data['sort'] == 'p.price') {
		$sql .= " ORDER BY instock DESC, (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
	} else {
		$sql .= " ORDER BY instock DESC, " . $data['sort'];
	}
} else {
	$sql .= " ORDER BY instock DESC, p.sort_order";
}

Потом обновите кэш модификаторов - Должно сработать. Товары с остатком 0 - будут в конце списка в категориях.

Спасибо! Всё взлетело и работает! ))

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


я вроде все сделал как описано Djeff78 на осстор 2.3.0.2.3 но сайт слег... Или это только для опенкарта решение?

Змінено користувачем Koss88
Надіслати
Поділитися на інших сайтах


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

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

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

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

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

Вхід

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

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

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

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

Important Information

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