商品一覧のデフォルト表示を価格順にする:EC-CUBE2.12

 この記事は最終更新から5年以上経過しています。内容が古くなっている可能性があります。

そもそもEC-CUBEの商品一覧ページには「価格順」「新着順」の並び替えボタン(?)がありますが、デフォルトの商品一覧では管理パネル内で設定したカテゴリー順が最優先されています。
これを価格の安い順で表示する方法をご紹介します。

/data/class/pages/products/LC_Page_Products_List.php の編集

188行目あたりからが商品一覧の表示に関連する箇所になりますのでここを編集します。
デフォルトの状態では次のようになっていると思います。

    /* 商品一覧の表示 */
    function lfGetProductsList($searchCondition, $disp_number, $startno, $linemax, &$objProduct) {

        $arrOrderVal = array();

        $objQuery =& SC_Query_Ex::getSingletonInstance();
        // 表示順序
        switch ($this->orderby) {
            // 販売価格が安い順
            case 'price':
                $objProduct->setProductsOrder('price02', 'dtb_products_class', 'ASC');
                break;

            // 新着順
            case 'date':
                $objProduct->setProductsOrder('create_date', 'dtb_products', 'DESC');
                break;

            default:
                if (strlen($searchCondition['where_category']) >= 1) {
                    $dtb_product_categories = '(SELECT * FROM dtb_product_categories WHERE '.$searchCondition['where_category'].')';
                    $arrOrderVal           = $searchCondition['arrvalCategory'];
                } else {
                    $dtb_product_categories = 'dtb_product_categories';
                }
                $order = <<< __EOS__
                    (
                        SELECT
                            T3.rank * 2147483648 + T2.rank
                        FROM
                            $dtb_product_categories T2
                            JOIN dtb_category T3
                              ON T2.category_id = T3.category_id
                        WHERE T2.product_id = alldtl.product_id
                        ORDER BY T3.rank DESC, T2.rank DESC
                        LIMIT 1
                    ) DESC
                    ,product_id DESC
__EOS__;
                    $objQuery->setOrder($order); 
               break;
        }

ここまでで大体お分かりになってしまうかと思いますが、
要は「default」を「販売価格が安い順」と同じ並び方にしてしまえば良いわけです。

    /* 商品一覧の表示 */
    function lfGetProductsList($searchCondition, $disp_number, $startno, $linemax, &$objProduct) {
        $arrOrderVal = array();
        $objQuery =& SC_Query_Ex::getSingletonInstance();
        // 表示順序
        switch ($this->orderby) {
            // 販売価格が安い順
            case 'price':
                $objProduct->setProductsOrder('price02', 'dtb_products_class', 'ASC');
                break;

            // 新着順
            case 'date':
                $objProduct->setProductsOrder('create_date', 'dtb_products', 'DESC');
                break;

            default:
                $objProduct->setProductsOrder('price02', 'dtb_products_class', 'ASC');
                break;
        }

はい、この通り。
応用で、「デフォルトで新着順で表示させる」のも簡単ですね。

ただし、こちらの方法が使えるのは2.11~2.12系のみ。
2.13以降は商品一覧の出力の仕方がまた異なりますので、上記のカスタマイズはそのままではお使い頂けません。
ご対応が難しい場合にはご相談いただけますようお願いいたします。

コーディングの代行、デザインを含めたオーダーメイドでのサイト制作、完成後の運用・保守を行うWebメンテナンスプランもご用意しておりますので、お悩みに合わせてお気軽にお問い合わせください。

03-5950-0525平日10:00〜19:00