対応事例
商品一覧のデフォルト表示を価格順にする:EC-CUBE2.12
この記事は最終更新から6年以上経過しています。内容が古くなっている可能性があります。
そもそも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以降は商品一覧の出力の仕方がまた異なりますので、上記のカスタマイズはそのままではお使い頂けません。
ご対応が難しい場合にはご相談いただけますようお願いいたします。