@test77

Как сделать автоматическую сортировку товаров по статусу на складе?

Всем привет. У всех товаров в магазине количество 0 и установлен статус при отсутствии на складе (например: "В наличии", "На заказ", "Нет в наличии"). В категории сделана сортировка товаров по умолчанию. Я каждому товару присваиваю sort_id (порядок сортировки) в ручном режиме. Хотелось бы чтобы sort_id выставлялся автоматически, в зависимости от статуса. Всем товарам со статусом "В наличии" - sort_order 1, "На заказ"- sort_order 2, "Нет в наличии" - sort_order 3. Подскажите, как это можно сделать?

Искал в гугле, вот такие костыли нашел, не знаю рабочий ли это вариант.
в 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 p.stock_status_id DESC, LCASE(" . $data['sort'] . ")";
            } elseif ($data['sort'] == 'p.price') {
                $sql .= " ORDER BY p.stock_status_id 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.stock_status_id DESC, " . $data['sort'];
            }
        } else {
            $sql .= " ORDER BY  p.stock_status_id DESC, p.sort_order";
  • Вопрос задан
  • 374 просмотра
Пригласить эксперта
Ответы на вопрос 3
@quake4fun
Как-то так :)
SELECT *,
	if(`status` = 'В наличии',3,0) AS mystatus3,
	if(`status` = 'На заказ',2,0) AS mystatus2,
	if(`status` = 'Нет наличии',1,0) AS mystatus1
	 FROM orders
ORDER BY mystatus3|mystatus2|mystatus1 DESC
Ответ написан
Комментировать
@Vitsliputsli
SELECT
        CASE WHEN status="В наличии" THEN 1
            WHEN status="На заказ" THEN 2 
            WHEN status="Нет в наличии" THEN 3
            ELSE null END sort_id,
            *
    FROM table

По-хорошему (т.е. чтобы работало быстрее) нужно все это нормализовать. Сделать таблицу статусов и в основной таблице ссылаться на их id, а в новой таблице уже просталять sort_id.
Ответ написан
Комментировать
zoozag
@zoozag
Opencart
$sql .= " ORDER BY p.stock_status_id DESC, p.sort_order";

Все ок. Будет сортироваться сначала по stock_status_id, потом по sort_order, если он задан.
Посмотрите чтобы stock_status_id соответствовали нужному вам порядку.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы