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

2019年5月31日EC-CUBE(2系)

EC-CUBE2.13系でカテゴリ一覧ページにHTML説明文を追加するカスタマイズ

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つを追加します。下記画像を参考に設定してください。

category_infoカラム・info_flgカラムをDBに追加
category_infoカラム・info_flgカラムをDBに追加 ※クリックで拡大

ポイント:照合順序は他のカラムと合わせ、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}-->

以上でカスタマイズは終了です。テストでカテゴリページに表示されるか確認下さい。

参考サイト

当記事を作成するにあたり、下記のブログ・フォーラムを参考にさせていただきました。