[EC-CUBE カスタマイズ日誌] 第 7 回 カテゴリに説明を付けたい
洗濯物を干すときはYahoo!天気情報を見ているtanakaです。後から雨が降りそうでも干したいときは東京アメッシュを見ながらとりこむタイミングを見計らっています。…といっても結局干していることを忘れてぬれることもありますけど。
さて、EC-CUBEカスタマイズの連載7回目は、カテゴリに、その説明を追加する方法を紹介します。作業内容としては、データベースを拡張し、それを編集・表示するロジックを管理画面、ユーザ画面に追加します。
概要
カテゴリに説明文を追加して、サイドメニューのカテゴリリストに表示するようにします。
1.データベース修正
説明文を保存するカラムを追加します。
ALTER TABLE dtb_category ADD COLUMN description text;
2.管理画面の修正
管理画面 → カテゴリ管理で、説明文の入力と保存ができるようにしましょう。
テンプレートの修正 - data/Smarty/templates/default/admin/products/category.tpl
カテゴリ一覧に説明文の列を追加します。
139行目付近(カテゴリ名の次)
<td width="160">説明</td>
153行目付近(<td align="center">…編集中…</td>の直前)
<td>
<a href="<!--{$smarty.server.PHP_SELF|escape}-->" onclick="fnModeSubmit('tree', 'parent_category_id', <!--{$arrList[cnt].category_id}-->); return false"><!--{$arrList[cnt].description|escape}-->
</td>
入力フォームにテキストフィールドとエラーメッセージを追加します
126行目付近
<span class="red12"><!--{$arrErr.description}--></span>
128行目付近
<input type="text" name="description" value="<!--{$arrForm.description|escape}-->" size="30" class="box30" maxlength="<!--{$smarty.const.STEXT_LEN}-->"/>
ロジックの修正 - data/class/pages/admin/products/LC_Page_Admin_Products_Category.php
データの取得・バリデーション・保存のロジックを追加します。
114行目付近
$description = $oquery->get("dtb_category", "description", $where, array($_POST['category_id']));
117行目付近
$this->arrForm['description'] = $description;
283行目付近
$col = "category_id, category_name, level, rank";
// ↓下のように書き換える
$col = "category_id, category_name, level, rank, description";
293行目付近
$this->objFormParam->addParam("説明", "description", STEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK"));
これで管理画面で説明文の入力・保存ができるようになります。
3.ユーザ画面の修正
ショップのお客さんに説明が見えるようにします。
テンプレートの修正 - data/Smarty/templates/default/bloc/category.tpl
46行目付近
サイドメニューのカテゴリツリーに説明を追加します。下のソースを、テンプレート中のカテゴリリストを表示する部分(li → aタグの中の、<!--{$arrTree[cnt].category_name|escape}-->の後に記述します)
<!--{$arrTree[cnt].description|escape}-->
ロジックの修正 - data/class/helper/SC_Helper_DB.php
データの取得のロジックを追加します。
608行目付近
$col .= " cat.description,";
まとめ
書き換える箇所が多いように感じるかもしれませんが、EC-CUBEで必要な処理が少し理解できるよいサンプルだと思います。