EC-CUBE2.13系でカテゴリ毎の商品一覧ページに説明文を追加する

EC-CUBE2.13系で、カテゴリ毎の商品一覧ページにHTMLで説明文・説明画像などを追加したい場合があります。管理画面でカテゴリ登録の画面に項目を増やし、説明文も管理できるようカスタマイズする方法をご紹介します。
導入環境
- サーバー:エックスサーバー
- EC-CUBEバージョン:2.13.5
- PHPバージョン:5.6.36
- DBバージョン:MySQL 5.7.18
カスタマイズの説明
①データベースのdtb_categoryテーブルに2つのカラムを追加
dtb_categoryテーブルに、カテゴリの説明文を格納するcategory_infoカラム(TEXT型)と、親カテゴリの説明文を引き継ぐフラグを管理するinfo_flgカラム(SMALLINT型)の2つを追加します。下記画像を参考に設定してください。

ポイント:照合順序は他のカラムと合わせ、NULLはどちらもチェックを入れます。上記の画像中にない値はすべて空白かデフォルトの状態でもOKです。
②管理画面の「カテゴリ登録」に説明文のフィールドを追加
1./data/Smarty/templates/admin/products/category.tplを編集
59行目あたり、<div class=”now_dir”>の直下に下記コードを追加します。
<!--{* カテゴリ説明文の入力フィールド追加 *}-->
<div>
<textarea name="category_info" cols="95" rows="15"><!--{$arrForm.category_info|escape}--></textarea><br />
<!--{if $arrForm.level != "1" && $arrForm.parent_category_id != "0"}-->
<input type="checkbox" name="info_flg" id="info_flg" value="1"<!--{if $arrForm.info_flg}--> checked="checked"<!--{/if}--> />
<label for="info_flg" class="fs10n">親カテゴリの説明文を引き継ぐ</label><!--{/if}-->
</div>
2./data/class/pages/admin/products/LC_Page_Admin_Products_Category.phpを編集
initParam()関数を探し、中に下記コードを追加します。
$objFormParam->addParam('カテゴリ説明', 'category_info', LLTEXT_LEN, 'KVa', array('SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('カテゴリ説明flg', 'info_flg', INT_LEN, null, array());
updateCategory()関数を以下に書き換えます。
public function updateCategory($category_id, $arrCategory)
{
$objQuery =& SC_Query_Ex::getSingletonInstance();
$arrCategory['update_date'] = 'CURRENT_TIMESTAMP';
$objQuery->begin();
$where = 'category_id = ?';
if($arrCategory['info_flg']) {
$parent_category_id = $objQuery->get("parent_category_id", "dtb_category", $where, array($category_id));
$arrCategory['category_info'] = $this->lfGetParentInfo($objQuery, $parent_category_id);
}
$objQuery->update('dtb_category', $arrCategory, $where, array($category_id));
$objQuery->commit();
}
ファイルの一番最後の}の前に、下記の関数を新たに追加します。
public function lfGetParentInfo($objQuery, $pid) {
$where = "category_id = ?";
$parent_info = $objQuery->get("category_info", "dtb_category", $where, array($pid));
return $parent_info;
}
以上で管理画面側のカスタマイズは終了です。
管理画面で正常に登録できるか確認
ここまでのカスタマイズを行うと、管理画面の「カテゴリ登録」ページにカテゴリ説明文の入力フォームが表示されるようになっています。正常に文章の入力、親カテゴリから説明文を引き継げるかテストを行います。

動作に問題がなさそうでしたら、続けて表示側のカスタマイズを行います。
③カテゴリ一覧ページ(表示側)に説明文を追加
1./data/class/pages/products/LC_Page_Products_List.phpを編集
189行目あたりのlfGetCategoryId()関数を探します。その中に記述がある
// 指定なしの場合、0 を返す
if (empty($category_id)) return 0;
の次の行に下記を追加します。
$objQuery = new SC_Query();
$this->category_info = $objQuery->get("category_info", "dtb_category", "category_id = ?", array($category_id));
2./data/Smarty/templates/(テンプレート名)/products/list.tplを編集
カテゴリの説明文を表示する任意の場所に、下記のコードを追加します。
※H2カテゴリタイトルの下あたりがおすすめです。
<!--{$category_info}-->
以上でカスタマイズは終了です。テストでカテゴリページに表示されるか確認下さい。
参考サイト
当記事を作成するにあたり、下記のブログ・フォーラムを参考にさせていただきました。
ディスカッション
コメント一覧
まだ、コメントがありません