Opencart在品类最后显示缺货

Opencart display out of stock at the end on category

如何在 opencart 中对我的产品进行排序,如下所示,

所有产品将按顺序排序,但缺货产品(即如果数量= 0)将列在类别末尾!

您可以有 2 个查询。 一个,其中quantity != 0 ORDER BY sort_order第二个 quantity = 0。然后你可以合并记录并得到你想要的输出。

在 opencart 2.2 中你必须改变 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";
}

并在"ORDER BY"

之后添加额外的排序规则p.quantity<1
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
   if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
            $sql .= " ORDER BY       p.quantity<1,               LCASE(" . $data['sort'] . ")  ";
        } elseif ($data['sort'] == 'p.price') {
            $sql .= " ORDER BY       p.quantity<1,               (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
        } else {
            $sql .= " ORDER BY       p.quantity<1,                " . $data['sort'];
        }
} else {
        $sql .= " ORDER BY           p.quantity<1,                p.sort_order";
}