Labo

[EC-CUBE 2.12.2] 商品一覧ページに一番末尾のカテゴリのみ表示したい

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


 

[EC-CUBE 2.11.2] 商品一覧ページにも関連カテゴリを表示したいというタイトルで、以前記事を書きました。
そのコメント欄で「関連カテゴリの中の”なべ”のみを表示させたい場合、どう記載すればよろしいでしょうか。」というご質問をいただきました。
そんなわけでちょっと頭を捻ってみました。

 

1.data/class/pages/products/LC_Page_Products_List.php を修正する
  actionメソッドがずいぶんスッキリしましたね。
  どこに書こうかなということで、doDefaultメソッド内(500行目付近)に以下のコードを書きました。

//onloadスクリプトを設定. 在庫ありの商品のみ出力する
foreach ($this->arrProducts as $arrProduct) {
    if ($arrProduct['stock_unlimited_max'] || $arrProduct['stock_max'] > 0) {
        $js_fnOnLoad .= "fnSetClassCategories(document.product_form{$arrProduct['product_id']});";
    }
    // 関連カテゴリを取得
    $this->arrRelativeCat[$arrProduct['product_id']] = SC_Helper_DB_Ex::sfGetMultiCatTree($arrProduct['product_id']);
}

2.data/Smarty/templates/default/products/list.tpl を修正する
  書く場所は、販売価格の下あたりが適当でしょうか。

<!--★関連カテゴリ★-->
<dl class="relative_cat">
    <dt>関連カテゴリ:</dt>
    <!--{section name=r loop=$arrRelativeCat[$id]}-->
        <dd>
            <!--{section name=s loop=$arrRelativeCat[$id][r]}-->
                <!--{if $smarty.section.s.last}-->
                <a href="<!--{$smarty.const.ROOT_URLPATH}-->products/list.php?category_id=<!--{$arrRelativeCat[$id][r][s].category_id}-->"><!--{$arrRelativeCat[$id][r][s].category_name}--></a>
                <!--{/if}-->
            <!--{/section}-->
        </dd>
    <!--{/section}-->
</dl>

  ループの最後だけ出力するって感じですね。

 

3.CSSはお好みで。

/* 関連カテゴリ */
div.listrightbloc dl.relative_cat {
    //background: url("../img/background/line_dot_01.gif") repeat-x scroll center bottom transparent;
    margin: 0 0 10px;
    //padding: 0 0 10px;
}
div.listrightbloc dl.relative_cat dt,
div.listrightbloc dl.relative_cat dd {
    float: none;
    display:block;
    padding-bottom:0;
}
div.listrightbloc dl.relative_cat dd {
    margin-left: 1em;
}

  プログラムはパズルやってるみたいで楽しいです。仕事でなければもっと楽しいのだけど。

[EC-CUBE 2.12.2] 商品一覧ページに一番末尾のカテゴリのみ表示したい への3件のコメント

  1. yukky より:

    fukap様

    いつも参考にさせて頂き、
    初心者にもとてもわかりやすく大変助かっております。ありがとうございます!

    こちらのカスタマイズですが
    PC版では関連カテゴリを表示されましたが
    スマホ版にですと表示がされません。

    tplファイルを見比べてみたのですが、
    原因が分からずコメントさせて頂きました。

    LC_Page_Products_List.phpを修正し、
    data/Smarty/templates/sphone/products/list.tpl
    に2.と同じソースを貼る他にも修正が必要なのでしょうか?

    お忙しいところ恐れ入りますが
    お教え頂けませんでしょうか?
    宜しくお願い致します。

  2. fukap より:

    手元のEC-CUBE2.13.1で確認したところ、
    data/class/pages/products/LC_Page_Products_List.php で
    if (SC_Display_Ex::detectDevice() === DEVICE_TYPE_PC) から始まる
    条件句の中にコードを書き加えてしまったので、
    PCにしか取得結果が出なかったようです。

    if (SC_Display_Ex::detectDevice() === DEVICE_TYPE_PC) から始まる
    条件句の外側で以下のコードを書けばスマホにも出力されるはずです。

    // 関連カテゴリを取得
            foreach ($this->arrProducts as $arrProduct) {
                $this->arrRelativeCat[$arrProduct['product_id']] = SC_Helper_DB_Ex::sfGetMultiCatTree($arrProduct['product_id']);
            }

    ただしスマホはAJAXで処理しているところがあるので、
    そこはまた別で考えないといけないと思います。

  3. yukky より:

    さっそくのご回答ありがとうございました!
    それなのにお礼のコメントが大変遅くなってしまい失礼しました。

    無事解決しました。
    いつも大変助かります。本当にありがとうございました!!

コメントを残す

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

* Copy This Password *

* Type Or Paste Password Here *

*

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