EC-CUBEには、カテゴリ一覧を表示させるブロックが備わってます。
ところでこのカテゴリ・ブロック、別の新しいブロックを作って、そこにソースを貼り付けるだけでは機能しません。およよ。。。
なので、ECサイトでは良く、ページ下部にもカテゴリ一覧を表示させちゃったりする場合もあるかと思ふのですが、それを行う事が出来ません。
そんなのはちょっと不便だという事で、同じカテゴリ一覧をブロックとして別個表示させる事が出来るようにしてみる事にしました。
またついでに、トップページでは表示されないサブカテゴリも、全て表示されるように変更。
ほとんどもとあるファイルをコピーして流用してます。
ファイルのコピーと書き換え
\data\class\pages\frontparts\bloc\LC_Page_FrontParts_Bloc_Category.php
のファイルをコピーして、
\data\class\pages\frontparts\bloc\LC_Page_FrontParts_Bloc_Category2.php
の名前で保存。(「2」をつけただけ)
ファイル内容の34行目を下記のように変更。(「2」をつけただけ)
class LC_Page_FrontParts_Bloc_Category2 extends LC_Page_FrontParts_Bloc {
46行目を下記のように変更。(「2」をつけただけ)
$bloc_file = 'category2.tpl';
この指定は、新しく作る予定のブロックファイル名を指定する箇所。
ファイルのコピーと書き換え
\data\class_extends\page_extends\frontparts\bloc\LC_Page_FrontParts_Bloc_Category_Ex.php
のファイルをコピーして、
\data\class_extends\page_extends\frontparts\bloc\LC_Page_FrontParts_Bloc_Category2_Ex.php
の名前で保存。(「2」をつけただけ)
ファイル内容の25行目を下記のように変更。(「2」をつけただけ)
require_once(CLASS_PATH . "pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Category2.php");
36行目を下記のように変更。(「2」をつけただけ)
class LC_Page_FrontParts_Bloc_Category2_Ex extends LC_Page_FrontParts_Bloc_Category2 {
ファイルのコピーと書き換え
\html\frontparts\bloc\category.php のファイルをコピーして、
\html\frontparts\bloc\category2.php の名前で保存。(「2」をつけただけ)
25行目を下記のように変更。(「2」をつけただけ)
require_once(CLASS_EX_PATH . "page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Category2_Ex.php");
30行目を下記のように変更。(「2」をつけただけ)
$objPage = new LC_Page_FrontParts_BLoc_Category2_Ex();
ブロックの新規作成
管理画面から新規ブロックを作成して、ファイル名を「category2(.tpl)」とします。
内容は下記。
<div id="categoryarea">
<h2>カテゴリー一覧</h2>
<div class="module-content">
<ul id="categorytree">
<!--{assign var=preLev value=1}-->
<!--{assign var=firstdone value=0}-->
<!--{section name=cnt loop=$arrTree}--><!--{* 表示フラグがTRUEなら表示 *}-->
<!--{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 class="level<!--{$level}--><!--{if in_array($arrTree[cnt].category_id, $tpl_category_id) }--> onmark<!--{/if}-->">
<a href="<!--{$smarty.const.URL_DIR}-->products/list.php?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 $smarty.section.cnt.last}-->
<!--{if $preLev-1 > 0 }-->
<!--{section name=d loop=`$preLev-1`}-->
</li>
</ul>
<!--{/section}-->
</li>
<!--{else}-->
</li>
<!--{/if}-->
<!--{/if}-->
<!--{/section}-->
</ul>
</div>
<!-- categoryarea end --></div>
データベースの内容書き換え
phpmyadminでデータベースを覗いて、テーブル:dtd_bloc内のbloc/category2.tplのphp_pathに、
「frontparts/bloc/category2.php」と入力。
以上で、サブカテゴリまで全て表示させるカテゴリ・ブロックが出来ました(「・ω・)「
あとがき
この例では、判り易いように単純に「2」としてみましたが、好きなようにclass名やテンプレート名を変更して使う事が出来ます。




いつも参考させて頂いているものです。
カテゴリの複数設置についてとても勉強になりました。
突然お邪魔して、このような質問をするのは失礼かと思いますが、
管理画面からカテゴリ2の登録を行なえるようにし、尚かつ
商品登録時にカテゴリ2の内容が選択出来るように項目を加えたいと思うのですが、
そのやり方をご教授いただけないでしょうか。
どうかお願い致したく存じます。
あんまり良い記事とは言えないのですが、読んで貰ってありがとございます_(..)_
質問内容についてなのですが、すいませんが少々ご質問の意図を汲み取る事が出来ません。。。カテゴリ・ブロックの設置については、その表示内容は、ただ既存のカテゴリ内容を引っ張ってくるだけのものです。
カテゴリの種別自体を2種類用意する、という事でしょうか・・・?
(商品登録時の「商品カテゴリ」の箇所ですね)