EC-CUBEのカテゴリ一覧を別のブロックでも利用出来るようにしてみる

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 さん
なんとか出来ないものかなぁ?と少し探ってみたのですが、カテゴリ管理自体を別で持たせるのか、productへのカラムの追加で出来るのかちょっと判断もし兼ねて難しかったです。
EC-CUBEの構築事例を辿って行った中に、それっぽいのがあったような気もします。
おもちゃ屋さんのようなサイトだったかもしれません。
お力になれずすいませんー_(..)_

▲ to Top

コメント(4)

いつも参考させて頂いているものです。
カテゴリの複数設置についてとても勉強になりました。

突然お邪魔して、このような質問をするのは失礼かと思いますが、
管理画面からカテゴリ2の登録を行なえるようにし、尚かつ
商品登録時にカテゴリ2の内容が選択出来るように項目を加えたいと思うのですが、
そのやり方をご教授いただけないでしょうか。

どうかお願い致したく存じます。

arata様
早速お返事コメントありがとうございます!
ご指摘通り、カテゴリの内容を引っ張ってくるものですが、
今、直面している難問は、カテゴリ自体を全く異なる形で
もう1つ設置したいと考えているのです…汗
つまりカテゴリブロックの複製と言った方が良いのでしょうか。

商品登録の際に、あまりにもカテゴリの種類が
多すぎてしまうので、カテゴリの種類を2つに分けてしまいたいなと…。

例えば

カテゴリA
 商品A(メインの階層)
 AのB商品(サブカテゴリ)
 AのBの白色(更に下の階層)
 AのBの白色のサイズA(更に下の階層)

カテゴリB
 名前一覧(メインの階層)
 男性(サブカテゴリ)
 名前(更に下の階層)
 女性(サブカテゴリ)
 名前(更に下の階層)

っと、きりなくカテゴリが増えてしまいそうな予感がするのと、
出版物を扱う際に、Aのカテゴリでは商品検索の為で、
Bのカテゴリ内では出版物の著者名検索用の対策として
別途登録していきたいと考えているのです。

最初に考えたのは、カテゴリではなく
商品登録の際に「検索ワード」をカンマ区切りで設定した
語句が、商品詳細ページに表示され、
語句それぞれに個別のサイト内検索リンクが自動で
設置できれば良いなと考えていたのですが、
カンマ区切りで複数のワードに個別でリンクを自動で貼ること自体、
更に難しいなと…。

上手く伝わったか自信ありませんが、
スルーして頂いても構いません。
「こう言う事をやりたいって人も居るんだなー」っと言う程度に
頭の隅に入れて頂けたら幸いです。

今後も記事を楽しみに拝見させて頂きます!^^
それでは。

トラックバック(0)

▲ to Top