[EC-CUBE]カテゴリブロックに商品数0のカテゴリも表示する

引き続き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

  1. パスが深すぎるよ。。。書くのも面倒。慣れれば分かりやすいかもしれないけどつらい。つらいよEC-CUBE []
  2. 元々入っているコメントは長くなるので省略しています []
  3. パラメータでON・OFFできるようにしておけばいいのにと思うのは私だけでしょうか?オーナーズストアのエラーコードとかこっちで変更しないようなパラメータは設定できるのにね。 []
スポンサーリンク
336x280_1
336x280_1

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
336x280_1