eccube 2.11.x 商品一覧ページの商品ソート(並べ替え)について | φ(..)メモとして残しておこう…

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つのファイルだけではなんとも…という感じです。

やれやれ…。

買うしかないのか…?