商品一覧ページに子カテゴリを表示する(2.13)

EC-CUBEの商品一覧ページ(カテゴリページ)には、商品がずらっと表示される。子カテゴリがあっても、楽天のように子カテゴリが表示されることはない。
一応、サイドメニューにカテゴリブロックを置くと構造はわかるものの、やや不便な点は否めない。
ということで、商品一覧ページに子カテゴリを表示させる。
参考:http://sachips.byeto.jp/eccube/eccube-products-list-sabcat.html

まず、/data/class/pages/products/LC_Page_Products_List.phpの92行目、function action()内に以下を記述。

// サブカテゴリリストを取得
$this->arrSubCatList = $this->lfGetCatTree($this->arrSearchData['category_id']);

場所は「画面に表示する検索条件を設定」と「商品一覧データの取得」の間ぐらいが適当じゃないかなと適当に。
次に、同じくLC_Page_Products_List.phpの最後に

/**
 * カテゴリツリーの取得
 *
 * @param array $parent_category_id 親カテゴリID
 * @param boolean $count_check 登録商品数をチェックする場合はtrue
 * @return array $arrRet カテゴリツリーの配列を返す
 */
function lfGetCatTree($parent_category_id, $count_check = false) {
        $objQuery =& SC_Query_Ex::getSingletonInstance();
        $objDb = new SC_Helper_DB_Ex();
        $col = '*';
        $from = 'dtb_category left join dtb_category_total_count ON dtb_category.category_id = dtb_category_total_count.category_id';
        // 登録商品数のチェック
        if ($count_check) {
                $where = 'del_flg = 0 AND product_count > 0 AND parent_category_id = ?';
        } else {
                $where = 'del_flg = 0 AND parent_category_id = ?';
        }
        $arrval = array($parent_category_id);
        $objQuery->setOption('ORDER BY rank DESC');
        return $objQuery->select($col, $from, $where, $arrval);
}

を追加。
この時に注意しなければならないのが、最後といっても一番最後の「}」よりは内側に入れること。
最後ということで素直にカッコの外側に記述すると、エラーがでる。
あとは、data/Smarty/templates/default/products/list.tpl

<!--{* ▼下位カテゴリ *}-->
<!--{if $arrSubCatList|@count > 0}-->
        <ul class="subcatlist_area">
        <!--{foreach from=$arrSubCatList item=category}-->
                <li>・<a href="<!--{$smarty.const.ROOT_URLPATH}-->products/list.php?category_id=<!--{$category.category_id|h}-->"><!--{$category.category_name|h}--></a></li>
        <!--{/foreach}-->
        </ul>
<!--{/if}-->
<!--{* ▲下位カテゴリ *}-->

を追加する。
 
※3.27追記
$count_checkがfalseの場合、登録商品がないサブカテゴリも表示されるが、リンク先のcategory_idが取得できず、へんなところに飛ばされる。
ので、カテゴリ作ったけどひも付けしてる商品がない場合は、$count_checkをtrueにしておいたほうがいいかもしれない。
そうすると、登録商品がないサブカテゴリがそもそも表示されないので、リンク先がわけわからんことにはならない。