- 2018.06.22
- [最終更新日]2018.07.06
- EC-cube
【EC-cube2.13】会員管理に項目を追加したい

今回は年間売上高と、検索用のセグメントを追加したいと思います。
DBに項目を追加
まずは、dtb_customerに項目を追加するために、SQL文にて下記を実行します。
ALTER TABLE dtb_customer ADD turnover int; -- 年間売上高
ALTER TABLE dtb_customer ADD turnover_seg smallint; -- 年間売上高セグメント
管理側会員登録画面の編集
Smartyテンプレート側ファイルの編集
「data/Smarty/templates/admin/customer/edit.tpl」を編集
<tr>
<th>年間売上高</th>
<td>
<span class="attention"><!--{$arrErr.turnover}--></span>
<input type="text" name="turnover" value="<!--{$arrForm.turnover|h}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->" size="30" class="box30" <!--{if $arrErr.turnover != ""}--><!--{sfSetErrorStyle}--><!--{/if}--> />
</td>
</tr>
<tr>
<th>年間売上高セグメント</th>
<td>
<span class="attention"><!--{$arrErr.turnover_seg}--></span>
<span <!--{if $arrErr.turnover_seg != ""}--><!--{sfSetErrorStyle}--><!--{/if}-->>
<!--{html_radios name="turnover_seg" options=$arrTurnOver separator=" " selected=$arrForm.turnover_seg}-->
</span>
</td>
</tr>
「data/Smarty/templates/admin/customer/edit_confirm.tpl」を編集
<tr>
<th>年間売上高</th>
<td><!--{$arrForm.turnover|h}--></td>
</tr>
<tr>
<th>年間売上高セグメント</th>
<td><!--{$arrTurnOver[$arrForm.turnover_seg]|h}--></td>
</tr>
会員登録システムの編集
「/data/class/helper/SC_Helper_Customer.php」
年間売上高
public function sfCustomerCommonParam(&$objFormParam, $prefix = '')
{
$objFormParam->addParam('お名前(姓)', $prefix . 'name01', STEXT_LEN, 'aKV', array('EXIST_CHECK', 'NO_SPTAB', 'SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('お名前(名)', $prefix . 'name02', STEXT_LEN, 'aKV', array('EXIST_CHECK', 'NO_SPTAB', 'SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('会社名', $prefix . 'company_name', STEXT_LEN, 'aKV', array('MAX_LENGTH_CHECK', 'SPTAB_CHECK'));
//追記 その後削除しました。理由は下記。
$objFormParam->addParam('年間売上高', $prefix . 'turnover', INT_LEN, 'aKV', array('MAX_LENGTH_CHECK', 'SPTAB_CHECK'));
18/07/06追記
上記に追記すると、”会員・顧客・お届け先共通”の項目になるようで、
お届け先を追加しようとした際に、「『dtb_other_deliv』に『turnover』という項目ないよー」みたいなエラーが出ちゃいました。
今回はお届け先に必要な項目ではないので、「turnover」も下記”会員登録共通”の項目に追記し直しました。
年間売上高セグメント
public function sfCustomerRegisterParam(&$objFormParam, $isAdmin = false, $is_mypage = false, $prefix = '')
{
$objFormParam->addParam('パスワード', $prefix . 'password', PASSWORD_MAX_LEN, '', array('EXIST_CHECK', 'SPTAB_CHECK', 'GRAPH_CHECK'));
$objFormParam->addParam('パスワード確認用の質問の答え', $prefix . 'reminder_answer', STEXT_LEN, '', array('EXIST_CHECK', 'SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('パスワード確認用の質問', $prefix . 'reminder', STEXT_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('性別', $prefix . 'sex', INT_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('職業', $prefix . 'job', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('年', $prefix . 'year', 4, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK'), '', false);
$objFormParam->addParam('月', $prefix . 'month', 2, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK'), '', false);
$objFormParam->addParam('日', $prefix . 'day', 2, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK'), '', false);
//追記
$objFormParam->addParam('年間売上高', $prefix . 'turnover', INT_LEN, 'aKV', array('MAX_LENGTH_CHECK', 'SPTAB_CHECK'));
$objFormParam->addParam('年間売上高セグメント', $prefix . 'turnover_seg', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK'));
ラジオボタンなど選択項目は、もうひと手間かかります。
EC-CUBEでは、select、radio、checkboxの選択肢はマスターデータで管理しています。新しい項目となりますので、マスターテーブルの追加が必要となります。
SQLで下記を実行。
CREATE TABLE `mtb_turnover_seg` (
`id` smallint(6) NOT NULL default '0',
`name` text,
`rank` smallint(6) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
「/data/class/pages/admin/customer/LC_Page_Admin_Customer_Edit.php」
public function init()
{
parent::init();
$this->tpl_mainpage = 'customer/edit.tpl';
$this->tpl_mainno = 'customer';
$this->tpl_subno = 'index';
$this->tpl_pager = 'pager.tpl';
$this->tpl_maintitle = '会員管理';
$this->tpl_subtitle = '会員登録';
$masterData = new SC_DB_MasterData_Ex();
$this->arrPref = $masterData->getMasterData('mtb_pref');
$this->arrCountry = $masterData->getMasterData('mtb_country');
$this->arrJob = $masterData->getMasterData('mtb_job');
$this->arrSex = $masterData->getMasterData('mtb_sex');
$this->arrReminder = $masterData->getMasterData('mtb_reminder');
$this->arrStatus = $masterData->getMasterData('mtb_customer_status');
$this->arrMailMagazineType = $masterData->getMasterData('mtb_mail_magazine_type');
//追記
$this->arrTurnOver = $masterData->getMasterData('mtb_turnover_seg');
マスターデータの登録 ※注意点※

マスターデータを登録する際は、必ず「システム設定>マスターデータ管理」より登録を行って下さい。上記のgetMasterData関数は、マスターデータをdata/cache/マスター名.serial ファイルより取得しています。「システム設定>マスターデータ管理」からマスターデータを編集すると、必ずserialファイルも上書きされますので、SQLで直接編集することは避けたほうがよいです。