Товары которых нет в наличии вниз списка

Отображать товары которых нет в наличии в самом конце списка с учетом разных сортировок и пагинации

март 12 , 2017

В Opencart сортировку товара можно сделать любую, по имени, рейтингу, цене и т.д. Но неудобно то что товары не сортируются по наличию - идут в общем списке по заданной сортировке. Часто, товар которого нет в наличии идет самым первым в списке, что неправильно и не логично.

Отличное решение - располагать товары которых нет в наличии в конце списка. Конечно, можно поставить сортировку p.quantity DESC. При таком решении товары будут сортироваться по количеству, но когда пользователь поставит свою, например по цене, товары которых нет в наличии будут в общем порядке.

Для вывода проданных товаров в конец надо в файле catalog/model/catalog/product.php найти функцию getProducts и там заменить

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";
}

Таким образом мы товары которых нет в наличии выводим в конце списка.

P.S. Не забудьте обновить кеш модификаторов после внесения правок для Opencart 2 версии.