対応事例
商品一覧のデフォルト表示を価格順にする:EC-CUBE2.12
この記事は最終更新から7年以上経過しています。内容が古くなっている可能性があります。

そもそも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以降は商品一覧の出力の仕方がまた異なりますので、上記のカスタマイズはそのままではお使い頂けません。
ご対応が難しい場合にはご相談いただけますようお願いいたします。

