3

カテゴリページにベストセラー商品による並べ替えを追加しようとしています。catalog/controller/product/category.phpこれを行うために、コントローラーに以下のコードを追加しました。

$this->data['sorts'][] = array(
    'text'  => 'Bestsellers',
    'value' => 'bestsellers',
    'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=bestsellers&order=DESC' . $url)
);

これを追加すると、並べ替えリストにベストセラーオプションが表示されます。今、この並べ替えを完了するためにデータベース クエリを実行しようとしています。Sort by Name (Az)のような既存の並べ替えを複製しようとしましたが、opencart を初めて使用するため、これを行うことができません。

これを行う方法のアイデアを教えてください。

4

2 に答える 2

2

私はあなたを導くだけです、クエリの部分はあなた次第です...

-method も編集しcatalog/model/catalog/product.phpますgetProducts($data)。この部分を確認します。

$sort_data = array(
    'pd.name',
    'p.model',
    'p.quantity',
    'p.price',
    'rating',
    'p.sort_order',
    'p.date_added'
);

新しい並べ替えを追加bestsellersします。たとえば、次の配列になります。

$sort_data = array(
    'pd.name',
    'p.model',
    'p.quantity',
    'p.price',
    'rating',
    'p.sort_order',
    'p.date_added',
    'bestsellers',
);

ここで、次の部分を編集するif (isset($data['sort']) && in_array($data['sort'], $sort_data)) {必要があるため、最終的には次のようになります。

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)";
    } elseif ($data['sort'] == 'bestsellers') { // <-- YOUR NEW SORTING
        $sql .= " ORDER BY <ADD YOUR SORTING QUERY HERE>";
    } else {
        $sql .= " ORDER BY " . $data['sort'];
    }
} else {
    $sql .= " ORDER BY p.sort_order";   
}

あなたの代わりに正しいクエリを追加した後、<ADD YOUR SORTING QUERY HERE>行う必要があります。

于 2013-04-17T10:52:18.560 に答える