Labo

[EC-CUBE 2.11.4] 商品一覧ページで、名前順に並べられるようにする

2012年01月07日 / 投稿者名:fukap


EC-CUBE2.12がスケジューリングされたようですね。
http://svn.ec-cube.net/open_trac/milestone/EC-CUBE2.12.0alpha

 

プラグイン機能実装が目玉みたいです。APIも標準実装して欲しいな。
ついでにカテゴリ情報が貧弱すぎるので、毎度コミュニティでわんさか聞かれるカテゴリ画像やカテゴリ説明文の登録機能はぜひ欲しい。
メーカー登録機能も標準実装の方向でいくなら、情報を増やしてメーカー一覧ブロックやメーカー一覧ページはあっていいですね。

 

さてさて本題です。
data/Smarty/templates/default/products/list.tpl の 103行目付近に以下のコードを挿入

<!--{if $orderby != 'name'}-->
    <a href="javascript:fnChangeOrderby('name');">名前順</a>
<!--{else}-->
    <strong>名前順</strong>
<!--{/if}-->&nbsp;

data/class/pages/products/LC_Page_Products_List.php の 258行目付近(switch ($this->orderby)の下あたり)に以下のコードを挿入

// 商品名の昇順
case 'name':
    $objProduct->setProductsOrder('name', 'dtb_products', 'ASC');
    break;

[EC-CUBE 2.11.4] 商品一覧ページで、名前順に並べられるようにする への2件のコメント

  1. hankinmae より:

    商品名に数字を使っていると、A1、A2、A11はA1、A11、A2となってしまいます。
    こちらを数字も含めてA1、A2、A11と名前順にする方法はあるでしょうか?ご教授いただけると幸いです。

    Array.sort(比較関数);
    ↑こちらを使うとできそうな気がして、
    data/Smarty/templates/default/products/list.tpl
    に以下を追加
    // 並び順を数値順に変更
    function fnChangeOrderbyNum(orderbynum) {
    var orderbynum = orderby.sort(function(a,b) {return a-b;});
    fnSetVal(‘orderbynum’, orderbynum);
       fnSetVal(‘pageno’, 1);
    fnSubmit();
    }
    と、乱暴な事もやってみましたがダメでした。

  2. chiharu より:

    fukap に代わり返信させていただきます。

    > こちらを数字も含めてA1、A2、A11と名前順にする方法はあるでしょうか?ご教授いただけると幸いです。

    ご質問内容は「自然順ソートの方法」と言うこととだと思います。

    hankinmaeさんの記載されているソースは、内容から見てJavascriptのソースだとお見受けします。
    ですが、未改造のEC-CUBE 商品一覧の場合、ソート順はPHPでDatabaseから情報を取得する際に設定します。
    そのため、Javascriptでの Array.sort を使用する方法では順番の変更は出来ません。
     ※ 当ページで使用している”fnChangeOrderby(‘name’);”は、name(名前)でのソートをするという
       指定を行っているだけで、この関数で再ソートを行っているわけではありません。

    なお、項目の使い方的に正道ではありませんし、運用上の障害もあるかと思いますが、当ページ改造部分の
    ‘name’となっている部分を’note’に変更すると、「備考欄(SHOP専用)」の内容でソートすることが出来ます。
    その上で表示順番に連番を設定するか、以下の様に設定すれば、ソート順の設定は出来たりします・・・。
      A1 → A00001
      A2 → A00002
     A11 → A00011
     ※ソート対象を桁数を揃えて登録する。

    お決まりですが、この場合は自己責任でお試し頂くことになります。

    また、以下は実際に改造する場合の簡単なフローと解説です。
    興味がなければ読み飛ばしていただいて結構です。

    data/Smarty/templates/default/products/list.tpl
    内でphp(natsort関数など)を使用して、取得した商品一覧の順番を変更することも可能ですが、
    ページ送りが発生するほどに商品数が登録されている場合は対応しきれません。
     ※ ページ内の順番しか入れ替えることが出来ないためです。

    そのため、自然順ソートを行う場合には、当ページのカスタマイズを行った上で、
    data/class/pages/products/LC_Page_Products_List.php
    内で、商品の一覧情報の取得として以下の処理を行う必要があります。

     1.全商品情報を取得する
     2.全商品情報に対して自然順での再ソートを行う。
     3.全商品情報のうち、表示開始位置から表示終了位置までのデータを抜き出す。
     4.抜き出した表示対象部分の商品情報を商品一覧情報として保存する。

    この場合、それなりのカスタマイズとなるため、ブログのコメント欄での遣り取りはご容赦願います。
    カスタマイズをご依頼の場合、有償となりますがナックウェブにて対応させていただきます。

コメントを残す

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

* Copy This Password *

* Type Or Paste Password Here *

*

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