eccube 2.11.x 商品一覧ページの商品ソート(並べ替え)について

EC-CUBE Product list page, add the item to sort products.

eccube 2.11系の商品一覧ページでの商品のソート追加は、とても簡単です。

基本的には data/Smarty/templates/default/products/list.tpl の

<div class="change">
                <!--{if $orderby != 'price'}-->
                    <a href="javascript:fnChangeOrderby('price');">価格順</a>
                <!--{else}-->
                    <strong>価格順</strong>
                <!--{/if}--> 
                <!--{if $orderby != "date"}-->
                        <a href="javascript:fnChangeOrderby('date');">新着</a>
                <!--{else}-->
                    <strong>新着順</strong>
                <!--{/if}-->

の部分に、お好みのソート条件を追加して、
data/class/pages/products/LC_Page_Products_List.php のfunction lfGetProductsList()のswitch部分にcaseを追加するだけです。

switch ($this->orderby) {
    // 販売価格が安い順
    case 'price':
    $objProduct->setProductsOrder('price02', 'dtb_products_class', 'ASC');
    break;
    ・
    ・
    ・
    ・

つまり、商品価格の高い順番に並べる…ということであれば
data/Smarty/templates/default/products/list.tplの<div class=”change”>の部分に

<div class="change">
                <!--{if $orderby != 'price'}-->
                    <a href="javascript:fnChangeOrderby('price');">価格順</a>
                <!--{else}-->
                    <strong>価格順</strong>
                <!--{/if}--> 
                <!--{if $orderby != 'price_h'}-->
                    <a href="javascript:fnChangeOrderby('price_h');">価格順(高い順)</a>
                <!--{else}-->
                    <strong>価格順(高い順)</strong>
                <!--{/if}--> 
                <!--{if $orderby != "date"}-->
                        <a href="javascript:fnChangeOrderby('date');">新着</a>
                <!--{else}-->
                    <strong>新着順</strong>
                <!--{/if}-->

とやってあげて、
data/class/pages/products/LC_Page_Products_List.php のfunction lfGetProductsList()のswitch部分には

switch ($this->orderby) {
    // 販売価格が安い順
    case 'price':
    $objProduct->setProductsOrder('price02', 'dtb_products_class', 'ASC');
    break;
    // 販売価格が高い順
    case 'price_h':
    $objProduct->setProductsOrder('price02', 'dtb_products_class', 'DESC');
    break;
    ・
    ・
    ・
    ・

とcaseに条件を追加してあげるだけで( `д´)b オッケー!

setProductsOrder('ソートするカラム名', 'テーブル名', '昇順か降順か(ASCかDESCか)');

を設定すればいいだけなのですが…。
(ただし指定できるテーブルはproduct_idを持っているテーブルであることが必要.
by SC_product.php Line 54 )

実際に、自分の環境では問題なく動作しました。
なのに、ある環境ではそれが反映されない。
他の部分のカスタマイズが影響しているとしか考えられないので、今回弄った2つのファイルだけではなんとも…という感じです。

やれやれ…。

買うしかないのか…?

「eccube 2.11.x 商品一覧ページの商品ソート(並べ替え)について」への1件のフィードバック

コメントは停止中です。