EC-CUBE
EC-CUBEの商品カテゴリメニューの全部出しに挑戦。
EC-CUBEの商品カテゴリメニューって、標準状態だと階層化して親子関係にしていると、親カテゴリーのトップに行かないと、カテゴリーメニューに子カテゴリーが表示されないんですヨね。個人的には、コレでも良いかなと思っていたのですけど、顧客の方からカテゴリーは、どのページでも全部出したいと要望が出ましたので、カテゴリーメニュー全部出しに挑戦することにしました。
自分なりに「category.tpl」を弄ってみたんですが、結局うまく行かず、諦めて暫く放置していたんですが、前エントリーで、EC-CUBEの開発コミュニティを徘徊していた時、偶然、カテゴリーメニュー全部出しの方法が紹介されていたスレッド「カテゴリの階層を折りたたまない方法を教えて下さい!」を見つけたので、再度カテゴリーメニュー全部出しに挑戦してみることにしました。
結果は、あっけなく完成。今まで苦労は何だったんでしょう。
手順は簡単なので忘れる事は無いと思いますが、覚え書きも兼ねて、手順を書いときます。
まず、WebブラウザーからEC-CUBEの管理画面にアクセスし、ログインします。上部のメニューから「デザイン管理」に入ります。そこからさらに「ブロック編集」に入り、「カテゴリ」を開きます。そのリストから「<!--{if $arrTree[cnt].display == 1}-->」を探し出し、「<!--{if $arrTree[cnt].display == 1|| $arrTre[cnt].level <=1}-->」に書き換えます。これで、常に子カテゴリーが表示された、まさにカテゴリーメニュー全部出しになりましたヨ。
孫カテゴリーや、ひ孫カテゴリーも設定していて、これも表示したい場合は、「<=1」の部分を表示したい階層分だけ大きくすれば良いです。孫カテゴリーまでだと「<=2」、ひ孫カテゴリーまでだと「<=3」ってな具合ですね。
カテゴリーを登録していても、そのカテゴリーに商品が1つも入っていない場合は、そのカテゴリー自体が表示されません。EC-CUBEのデフォルトの機能ですから、慌てないように。
ついでに変更したリストも書いておきます。なお、下記のコードは、装飾用のタグや、CSSのセレクタ名は省いていますので、ご注意下さい。
<!--商品カテゴリーここから--> <h2> <img src="<!--{$TPL_DIR}-->/img/side/title_cat.jpg" alt="商品カテゴリー" /> </h2> <ul> <!--{assign var=preLev value=1}--> <!--{assign var=firstdone value=0}--> <!--{section name=cnt loop=$arrTree}--> <!--{* 表示フラグがTRUEなら表示 *}--> <!--{if $arrTree[cnt].display == 1|| $arrTree[cnt].level <=1}--> <!--{assign var=level value=`$arrTree[cnt].level`}--> <!--{assign var=levdiff value=`$level-$preLev`}--> <!--{if $levdiff > 0}--> <ul> <!--{elseif $levdiff == 0 && $firstdone == 1}--> </li> <!--{elseif $levdiff < 0}--> <!--{section name=d loop=`$levdiff*-1`}--> </li> </ul> <!--{/section}--> </li> <!--{/if}--> <li><a href="<!--{$smarty.const.URL_DIR}-->products/list.htm?category_id=<!--{$arrTree[cnt].category_id}-->"<!--{if in_array($arrTree[cnt].category_id, $tpl_category_id) }--> class="onlink"<!--{/if}-->><!--{$arrTree[cnt].category_name|escape}-->(<!--{$arrTree[cnt].product_count|default:0}-->)</a> <!--{if $firstdone == 0}--><!--{assign var=firstdone value=1}--><!--{/if}--> <!--{assign var=preLev value=`$level`}--> <!--{/if}--> <!--{* セクションの最後に閉じタグを追加 *}--> <!--{if $smarty.section.cnt.last}--> <!--{if $preLev-1 > 0 }--> <!--{section name=d loop=`$preLev-1`}--> </li> </ul> <!--{/section}--> </li> <!--{else}--> </li> <!--{/if}--> <!--{/if}--> <!--{/section}--> </ul> <!--商品カテゴリーここまで-->
後、カテゴリーメニュー全部だしをすると、登録しているカテゴリー数が多い場合、ページが異様に長くなってしまうんですヨね。なので、コレをする時にカテゴリーの登録数は控えめに。