IT女子のお気に入りフォルダ

管理人の備忘録と実践を兼ねた(出来るだけ)役に立つ情報を配信するブログです。

[EC-CUBE2.13]お問い合わせフォームを追加する

EC-CUBEには標準でお問い合わせフォームが一つ用意されています。
このお問い合わせフォームとは別に返品受付フォームを追加してみようと思います。

手順

追加する返品受付フォームを「return」とします。

  1. ページを追加する
  2. tplファイルを追加する
  3. メールテンプレートを追加する
  4. classを追加する
  5. class_extendsを追加する
  6. データベースに追加する

ページを追加する

html/contact/index.php
html/contact/complete.php
をコピーして以下のファイルを追加します。
html/contact/return.php
html/contact/return_complete.php

●html/contact/return.phpを以下のとおり修正する

require_once '../require.php';
require_once CLASS_EX_REALDIR . 'page_extends/contact/LC_Page_Return_Ex.php';

$objPage = new LC_Page_Return__Ex();
$objPage->init();
$objPage->process();

●html/contact/return_complete.phpを以下のとおり修正する

require_once '../require.php';
require_once CLASS_EX_REALDIR . 'page_extends/contact/LC_Page_Return_Complete_Ex.php';

$objPage = new LC_Page_Return_Complete_Ex();
$objPage->init();
$objPage->process();

tplファイルを追加する

data/Smarty/templates/default/contact/index.tpl
data/Smarty/templates/default/contact/confirm.tpl
data/Smarty/templates/default/contact/complete.tpl
をコピーして以下のファイルを追加します。
data/Smarty/templates/default/contact/return.tpl
data/Smarty/templates/default/contact/return_confirm.tpl
data/Smarty/templates/default/contact/return_complete.tpl

追加するフォームに必要な任意の項目で入力ページ、確認ページ、完了ページをつくります。

メールテンプレートを追加、設定

data/Smarty/templates/default/mail_templates/contact_mail.tpl
をコピーして以下のファイルを追加します。
data/Smarty/templates/default/mail_templates/return_mail.tpl

フォーム作成時に追加した任意の項目を考慮して自動送信されるメールの内容をつくります。

メールテンプレートができたら、管理画面から使用するテンプレートとして登録します。
管理画面[システム設定]>[マスターデータ管理]で「mtb_mail_template」に返品申請受付メールを追加します。
(ここでのIDをclass追加時に使用します)

mtb_mail_template

次に「mtb_mail_tpl_path」でテンプレートファイルを指定します。

mtb_mail_tpl_path

classを追加する

data/class/pages/contact/LC_Page_Contact.php
data/class/pages/contact/LC_Page_Contact_Complete.php
をコピーして以下のファイルを追加します。
data/class/pages/contact/LC_Page_Return.php
data/class/pages/contact/LC_Page_Return_Complete.php

●LC_Page_Return.phpを以下のとおり修正する

class LC_Page_Return extends LC_Page_Ex
{
    /**
     * Page を初期化する.
     *
     * @return void
     */
    public function init()
    {
        parent::init();
        if (SC_Display_Ex::detectDevice() == DEVICE_TYPE_MOBILE) {
            $this->tpl_title = '返品申請フォーム';
        } else {
            $this->tpl_title = '返品申請フォーム(入力ページ)';
        }
        $this->httpCacheControl('nocache');
case 'confirm':
    // エラーチェック
    $this->lfInitParam($objFormParam);
    $objFormParam->setParam($_POST);
    $objFormParam->convParam();
    $objFormParam->toLower('email');
    $objFormParam->toLower('email02');
    $this->arrErr = $this->lfCheckError($objFormParam);
    // 入力値の取得
    $this->arrForm = $objFormParam->getFormParamList();

    if (SC_Utils_Ex::isBlank($this->arrErr)) {
        // エラー無しで完了画面
        $this->tpl_mainpage = 'contact/return_confirm.tpl';
        $this->tpl_title = '返品申請(確認ページ)';
    }

    break;
case 'complete':
    $this->lfInitParam($objFormParam);
    $objFormParam->setParam($_POST);
    $this->arrErr = $objFormParam->checkError();
    $this->arrForm = $objFormParam->getFormParamList();
    if (SC_Utils_Ex::isBlank($this->arrErr)) {
        $this->lfSendMail($this);

        // 完了ページへ移動する
        SC_Response_Ex::sendRedirect('return_complete.php');
        SC_Response_Ex::actionExit();
    } else {
        SC_Utils_Ex::sfDispSiteError(CUSTOMER_ERROR);
        SC_Response_Ex::actionExit();
    }
    break;

lfSendMailファンクションでtemplate_idを指定します。
template_idは、管理画面でメールテンプレートを登録したときの数字です。

public function lfSendMail(&$objPage)
{
    $CONF = SC_Helper_DB_Ex::sfGetBasisData();
    $objPage->tpl_shopname = $CONF['shop_name'];
    $objPage->tpl_infoemail = $CONF['email02'];
    $helperMail = new SC_Helper_Mail_Ex();
    $helperMail->setPage($this);
    $helperMail->sfSendTemplateMail(
        $objPage->arrForm['email']['value'],            // to
        $objPage->arrForm['name01']['value'] .' 様',    // to_name
        11,                                             // template_id
        $objPage,                                       // objPage
        $CONF['email03'],                               // from_address
        $CONF['shop_name'],                             // from_name
        $CONF['email02'],                               // reply_to
        $CONF['email02']                                // bcc
    );
}

フォームに追加した項目で入力チェックが必要な場合は、lfInitParam(&$objFormParam)に追記します。

●LC_Page_Return_Complete.phpを以下のとおり修正する

class LC_Page_Return_Complete extends LC_Page_Ex
{
    /**
     * Page を初期化する.
     *
     * @return void
     */
    public function init()
    {
        parent::init();
        $this->tpl_title = '返品申請(完了ページ)';
        $this->tpl_mainno = 'contact';
    }

class_extendsを追加する

data/class_extends/pages_extends/contact/LC_Page_Contact_Ex.php
data/class_extends/pages_extends/contact/LC_Page_Contact_Complete_Ex.php
をコピーして以下のファイルを追加します。
data/class_extends/pages_extends/contact/LC_Page_Return_Ex.php
data/class_extends/pages_extends/contact/LC_Page_Return_Complete_Ex.php

●LC_Page_Return_Ex.phpを以下のとおり修正する

require_once CLASS_REALDIR . 'pages/contact/LC_Page_Return.php';

/**
 * 返品申請 のページクラス(拡張).
 *
 * LC_Page_Return をカスタマイズする場合はこのクラスを編集する.
 *
 * @package Page
 * @author 
 * @version 
 */
class LC_Page_Return_Ex extends LC_Page_Return
{

(コメント部分の修正はお好きなように。)

●LC_Page_Return_Complete_Ex.phpを以下のとおり修正する

require_once CLASS_REALDIR . 'pages/contact/LC_Page_Return_Complete.php';

/**
 * 返品申請(完了ページ) のページクラス(拡張).
 *
 * LC_Page_Return_Complete をカスタマイズする場合はこのクラスを編集する.
 *
 * @package Page
 * @author 
 * @version 
 */
class LC_Page_Return_Complete_Ex extends LC_Page_Return_Complete
{

(コメント部分の修正はお好きなように。)

データベースに追加する

「dtb_pagelayout」に返品申請フォームの入力ページと完了ページを追加します。

●入力ページ

device_type_id 10
page_id 最後の番号+1
page_name 返品申請フォーム
url contact/return.php
filename contact/return
header_chk 1
footer_chk 1
edit_flg 2
create_date now()
update_date now()

●完了ページ

device_type_id 10
page_id 上記入力ページの番号+1
page_name 返品申請(完了ページ)
url contact/return_complete.php
filename contact/return_complete
header_chk 1
footer_chk 1
edit_flg 2
create_date now()
update_date now()

作業量が多目ですが、これで完了です。
追加するフォームの項目が多いと大変かも・・・