引き続きEC-CUBEネタです。
やったことはすぐに記録しないと忘れてしまうので、2、3日EC-CUBEネタが続くかもしれません。
カテゴリブロックに表示するカテゴリを取得する処理は/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Category.php*1 のactionメソッドに書かれているので、このactionメソッドをclass_extends内の子クラスにコピーして、下記の部分を修正します。
カテゴリ取得部分の修正
$this->arrTree = $this->lfGetCatTree($this->tpl_category_id, true); // ↓ $this->arrTree = $this->lfGetCatTree($this->tpl_category_id, false);
LC_Page_FrontParts_Bloc_Category_Ex.phpのソースはこのようになります。*2
<?php
require_once CLASS_REALDIR . 'pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Category.php';
class LC_Page_FrontParts_Bloc_Category_Ex extends LC_Page_FrontParts_Bloc_Category {
// }}}
// {{{ functions
/**
* Page を初期化する.
*
* @return void
*/
function init() {
parent::init();
}
/**
* Page のプロセス.
*
* @return void
*/
function process() {
parent::process();
}
/**
* Page のアクション.
*
* @return void
*/
function action() {
// モバイル判定
switch ( SC_Display_Ex::detectDevice() ) {
case DEVICE_TYPE_MOBILE:
// メインカテゴリーの取得
$this->arrCat = $this->lfGetMainCat(true);
break;
default:
// 選択中のカテゴリID
$this->tpl_category_id = $this->lfGetSelectedCategoryId($_GET);
// カテゴリツリーの取得
$this->arrTree = $this->lfGetCatTree($this->tpl_category_id, false);
break;
}
}
/**
* デストラクタ.
*
* @return void
*/
function destroy() {
parent::destroy();
}
}
?>
変更したのはlfGetCatTreeメソッドの第2引数のみ。
lfGetCatTreeはカテゴリツリーの取得メソッドで、第2引数は商品数をチェックするかどうかのフラグです。
このフラグをtrueからfalseにしてやることで、商品数が0のカテゴリも取得することができます。
ビュー側の修正
カテゴリブロックのビューは/data/Smarty/templates/テンプレート名/frontparts/block/category.tplになります。
前回の記事のデバッグ方法で、取得したカテゴリを表示してみましょう。
/data/Smarty/templates/テンプレート名/frontparts/block/category.tpl
<!--{$arrTree|@debug_print_var:4:200}-->
すると、商品数0のカテゴリも取得できていますね?
ただしカテゴリブロックには表示されていないはずです。
またこれも厄介な話なのですが、先ほどのlfGetCatTreeメソッドでは通常表示するカテゴリにわざわざdisplayというフラグををもたせて、カテゴリブロックのビューでこのdeisplayを判定して表示しています。
そのため、商品数が0のカテゴリはif文の判定でこぼれてしまい表示されないのです。
取得してきた商品数0のカテゴリを表示するにはこのif文を回避する必要があります。
手っ取り早く表示させるならこんな感じです。
<!--{if $arrTree[cnt].display == 1}-->
↓
<!--{if $arrTree[cnt].display == 1 or true}-->
もちろんif文を閉じたタグも含めて削除してもOKです。
EC-CUBE厄介奥が深いです。。。σ(^_^; )*3
