[EC-CUBE2.13]商品一覧ページに子カテゴリ一覧を表示する

  • 公開日:2014/4/28
この記事は最終更新日から10年以上が経過しています。

EC-CUBEの商品一覧ページで見出し(カテゴリ名)の下に子カテゴリを表示するカスタマイズ。
ユーザーの操作性アップになるので、購入導線改善にもなると思います。
簡単なのでやっといて損はないでしょう。
list_subcatlist_01

1.data/class/pages/products/LC_Page_Products_List.php
135行目あたりに以下を追加

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

2.同じくdata/class/pages/products/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);
}

カテゴリツリーを取得する処理をローカル関数として追加。
DBから取得する段階で、親カテゴリID(parent_category_id)を渡します。

3.data/Smarty/templates/default/products/list.tpl
子カテゴリを表示したい場所に以下を記述

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

idを振ってみたので、後はスタイルを好きに指定するのみです。