
[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) から始まる
条件句の外側で以下のコードを書けばスマホにも出力されるはずです。
// 関連カテゴリを取得 foreach ($this->arrProducts as $arrProduct) { $this->arrRelativeCat[$arrProduct['product_id']] = SC_Helper_DB_Ex::sfGetMultiCatTree($arrProduct['product_id']); }ただしスマホはAJAXで処理しているところがあるので、
そこはまた別で考えないといけないと思います。
さっそくのご回答ありがとうございました!
それなのにお礼のコメントが大変遅くなってしまい失礼しました。
無事解決しました。
いつも大変助かります。本当にありがとうございました!!