• 2018.06.22
  • [最終更新日]2018.07.06
  • EC-cube

【EC-cube2.13】会員管理に項目を追加したい

【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で直接編集することは避けたほうがよいです。

次回は

次回は追加した項目で絞り込み検索できるようにしたいです。