EC-CUBEの小技:カテゴリブロックをプルダウン化する方法
プルダウンjQueryの設置
ダウンロードは以下の記事に行き
JQueryで簡単に作るドロップダウンメニューいろいろ | DesignWalker
以下の項目よりダウンロードします。
Create a multilevel Dropdown menu with CSS and improve it via jQuery
設置はいつものように、しましょう。
menu.jsファイルは/html/js/へ。
style.cssファイルは/html/user_data/packages/default/cssへ。
/data/Smarty/templates/default/site_frame.tpl に以下を追加。
<script type="text/javascript" src="<!--{$smarty.const.ROOT_URLPATH}-->js/menu.js"></script>
/html/user_data/packages/default/css/import.css に以下を追加。
@import url("./style.css");
※場合によっては、このファイル名が使われている場合があるので、応じて名前を変えましょう。
tplファイルの変更
それでは、テンプレートファイルを変更して、プルダウン化しましょう。
/data/Smarty/templates/default/frontparts/bloc/category.tpl
以下に全書き換え。
<div class="bloc_outer"> <div id="category_area"> <div class="bloc_body"> <h2><img src="<!--{$TPL_URLPATH}-->img/title/tit_bloc_category.gif" alt="商品カテゴリー" /></h2> <!--{strip}--> <ul id="nav"> <!--{assign var=preLev value=1}--> <!--{assign var=firstdone value=0}--> <!--{section name=cnt loop=$arrTree}--> <!--{* 表示フラグがTRUEなら表示 *}--> <!--{if $arrTree[cnt].display == 1|| $arrTree[cnt].level <=2}--> <!--{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 $levdiff > 0}-->first<!--{/if}-->"> <a href="<!--{$smarty.const.ROOT_URLPATH}-->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|h}-->(<!--{$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> <!--{/strip}--> </div> </div> </div>
一箇所だけ修正が。
/html/user_data/packages/default/css/bloc.css
38行目を削除でも、コメントアウトでも。
.side_column { // overflow-x: hidden; /* IE6 表示乱れ防止 */ }
あとはCSSでお好みに形を整えましょう。
階層を限定して表示したい人は以下。
<!--{if $arrTree[cnt].display == 1|| $arrTree[cnt].level <=2}-->
上記の行の<=2の数字を変えてみましょう。
数字が2であれば、2階層目まで表示するという事です。
以上です。
以前は、死ぬほど難しそうで手を出さなかったのですが、やったらやったで、あっけなく。
そんなものなんですよね。
このカスタマイズはVer.2.12でも利用できます。
追記:CSS
質問がありまして、ちょっと混乱してしまったので、自分用としてもCSSを追記しました。
(2013/10/05)
追加で読み込ませた/html/user_data/packages/default/css/import.cssを以下のCSSですべて上書き
#category_area { background-color: #FFFFFF; height: auto; } #nav, #nav ul { line-height: 1.8em; list-style-position: outside; list-style-type: none; margin: 0; padding: 0; position: relative; } #nav a { display: block; font-size: 13px; padding: 2px 2px 1px 5px; position: relative; text-decoration: none; } #nav a:hover { color: #E62E71; position: relative; text-decoration: none; } #nav li:hover { background-color: #E4E4E4; overflow: visible; position: relative; } #nav ul li a:hover { color: #E62E71; position: relative; text-decoration: none; } #nav li { background-color: #FFFFFF; overflow: hidden; padding: 3px 0 4px 7px; position: relative; } #nav li.level1 { background: url("../img/icon/cate_arrow.gif") no-repeat scroll 3px 12px rgba(0, 0, 0, 0); } #nav li.level1 a { } #nav ul { background-color: #FFFFF0; border-color: #CCCCCC; border-style: solid; border-width: 1px 0; left: 100%; margin-top: -2px; position: absolute; top: 0; width: 200px; z-index: 9999; } #nav ul li { border-color: #CCCCCC; border-style: solid; border-width: 0 1px; } #nav ul li.first { border-color: #CCCCCC; border-style: solid; border-width: 0 1px 0 0; } #nav ul li { background: none repeat scroll 0 0 #FFFFF0; padding-bottom: 4px; padding-left: 13px; } #nav ul ul { left: 100%; top: 0; width: 180px; } #nav ul li.level2 a { background-image: none; font-family: Arial,sans-serif; font-weight: normal; line-height: 23px; padding-left: 5px; } #nav li ul ul { left: 100%; top: 0; } .arrow_top { background: url("../img/icon/arrow.png") no-repeat scroll 0 0 rgba(0, 0, 0, 0); height: 10px; position: absolute; right: 5px; top: 7px; width: 10px; } .arrow { background: url("../img/icon/arrow.png") no-repeat scroll 0 0 rgba(0, 0, 0, 0); height: 15px; left: 10px; position: absolute; top: 7px; width: 10px; } #nav li.cate_page { border-bottom: 1px dotted #CCCCCC; padding: 0 10px 0 0; text-align: center; } #nav li.cate_page a { color: #E62E71; font-size: 13px; }
さらに、/html/user_data/packages/default/css/block.cssの以下の部分を削除
.side_column { overflow-x: hidden; }
これで最低限の表示になるはずです。
整形はご自分のお好みでどうぞ。