Labo

[EC-CUBE 2.11.5] 商品一覧で商品コードをデフォルトの並び順にする

2012年05月13日 / 投稿者名:fukap


これも開発コミュニティに挙がっていたネタ。ちょっとヒントをご提供したら、自力解決できたみたいで、良かった。
全く勘でアドバイスしてたので、実際にやってみました。
元々の default: の定義をコメントアウトして、新しい記述を一行加えただけです。

 

data/class/pages/products/LC_Page_Products_List.php の 268L付近

default:
/*
    if (strlen($searchCondition["where_category"]) >= 1) {
        $dtb_product_categories = "(SELECT * FROM dtb_product_categories WHERE ".$searchCondition["where_category"].")";
        $arrval_order           = array_merge($searchCondition['arrvalCategory'], $searchCondition['arrvalCategory']);
    } else {
        $dtb_product_categories = 'dtb_product_categories';
    }
    $order = <<< __EOS__
        (
            SELECT
                 T3.rank
            FROM
                $dtb_product_categories T2
                JOIN dtb_category T3
                    USING (category_id)
            WHERE T2.product_id = alldtl.product_id
            ORDER BY T3.rank DESC, T2.rank DESC
            LIMIT 1
        ) DESC
        ,(
            SELECT
                T2.rank
            FROM
                $dtb_product_categories T2
                JOIN dtb_category T3
                    USING (category_id)
            WHERE T2.product_id = alldtl.product_id
            ORDER BY T3.rank DESC, T2.rank DESC
            LIMIT 1
        ) DESC
        ,product_id
__EOS__;
*/
        $objProduct->setProductsOrder('product_code', 'dtb_products_class', 'ASC');
        $objQuery->setOrder($order);
    break;

自分の当初のアドバイス通りにやったらあっさりできたんだけど、ふと疑問に思ったのが規格のある商品のケース。
規格商品の場合は、どういうロジックで並べ替えが行われてるのかなと見てみたら、
data/class/SC_Product.php の findProductIdsOrder() に手がかりがありました。

$order = <<< __EOS__
            (
                SELECT $o_col
                FROM
                    $o_table as T2
                WHERE T2.product_id = alldtl.product_id
                ORDER BY T2.$o_col $o_order
                LIMIT 1
            ) $o_order, product_id
__EOS__;

ここで、$order を定義していますが、今回のケースで言えば、
$order = ” ( SELECT product_code FROM dtb_products_class as T2 WHERE T2.product_id = alldtl.product_id ORDER BY T2.product_code ASC LIMIT 1 ) ASC, product_id”
になります。
規格がある商品の場合、それらの product_code を昇順に並べたうち、1番上のものを抽出して、並べ替え条件に使っているようです。

 

というわけで、規格商品の場合も配慮されているようで安心しました。

[EC-CUBE 2.11.5] 商品一覧で商品コードをデフォルトの並び順にする への1件のコメント

  1. ピンバック: EC-CUBE NEWS | EC-CUBEに関するニュースやブログの最新情報をお届けします

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

* Copy This Password *

* Type Or Paste Password Here *

*

コメント欄にコードを挿入したい場合は、[php][/php] を使ってください。