[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; }
プログラムはパズルやってるみたいで楽しいです。仕事でなければもっと楽しいのだけど。
fukap様
いつも参考にさせて頂き、
初心者にもとてもわかりやすく大変助かっております。ありがとうございます!
こちらのカスタマイズですが
PC版では関連カテゴリを表示されましたが
スマホ版にですと表示がされません。
tplファイルを見比べてみたのですが、
原因が分からずコメントさせて頂きました。
LC_Page_Products_List.phpを修正し、
data/Smarty/templates/sphone/products/list.tpl
に2.と同じソースを貼る他にも修正が必要なのでしょうか?
お忙しいところ恐れ入りますが
お教え頂けませんでしょうか?
宜しくお願い致します。
手元の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) から始まる
条件句の外側で以下のコードを書けばスマホにも出力されるはずです。
ただしスマホはAJAXで処理しているところがあるので、
そこはまた別で考えないといけないと思います。
さっそくのご回答ありがとうございました!
それなのにお礼のコメントが大変遅くなってしまい失礼しました。
無事解決しました。
いつも大変助かります。本当にありがとうございました!!