[EC-CUBE 2.11.2] お問い合わせフォームを追加したい

EC-CUBEには標準でお問い合わせフォームが1つついています。
これを目的ごとにいくつか作りたいって場合がありますよね。
今回は例えば、修理受付専用メールフォームを作成する目的で、お問い合わせフォームを追加してみます。

1.既存ファイルをコピーして、関連ファイルを作成
 (今回は修理受付フォームなので、repair という名前を主に使用しますが、好きな名前でOKです)

  html/contact/index.php をコピーして、html/contact/repair.php を作成
  data/class_extends/page_extends/contact/LC_Page_Contact_Ex.php をコピーして、data/class_extends/page_extends/contact/LC_Page_Contact_Repair_Ex.php を作成
  data/class/pages/contact/LC_Page_Contact.php をコピーして、data/class/pages/contact/LC_Page_Contact_Repair.php を作成
  data/Smarty/templates/default/contact/index.tpl をコピーして、data/Smarty/templates/default/contact/repair.tpl を作成

2.html/contact/repair.php を修正

// {{{ requires
require_once '../require.php';
require_once CLASS_EX_REALDIR . 'page_extends/contact/LC_Page_Contact_Repair_Ex.php';   // ここを修正

// }}}
// {{{ generate page

$objPage = new LC_Page_Contact_Repair_Ex();   // ここを修正
register_shutdown_function(array($objPage, "destroy"));
$objPage->init();
$objPage->process();
?>

3.data/class_extends/page_extends/contact/LC_Page_Contact_Repair_Ex.php を修正

// {{{ requires
require_once CLASS_REALDIR . 'pages/contact/LC_Page_Contact_Repair.php';   // ここを修正

/**
 * お問い合わせ のページクラス(拡張).
 *
 * LC_Page_Contact をカスタマイズする場合はこのクラスを編集する.
 *
 * @package Page
 * @author LOCKON CO.,LTD.
 * @version $Id: LC_Page_Contact_Ex.php 20764 2011-03-22 06:26:40Z nanasess $
 */
class LC_Page_Contact_Repair_Ex extends LC_Page_Contact_Repair {   // ここを修正

4.data/class/pages/contact/LC_Page_Contact_Repair.php を修正

class LC_Page_Contact_Repair extends LC_Page_Ex {

5.データベースの dtb_pagelayout に、以下のような感じで新規レコードを入力

[text] Column | Value
—————-+—————————–
device_type_id | 10
page_id | 29
page_name | contact_repair
url | contact/repair.php
filename | contact/repair
header_chk | 1
footer_chk | 1
edit_flg | 2
author |
description |
keyword |
update_url |
create_date | now()
update_date | now()[/text]

  device_type_id は端末種類を示す。10はPC、1はMobile、2はスマホ。
  page_id はdevice_type_idごとに重複のない番号を使用する。あらかじめ他のレコードのpage_idを調べること。
  page_name はファイル名なので、日本語でもOK。
  url は、フロント側のURLを htmlディレクトリを除いた形で入れる。
  filename は、任意のファイル名を英数で。

6.ここまでできたら、管理画面>デザイン管理>PC>レイアウト設定 で、作成したページが一覧の中に表示されているか確認。
  ブロックをはめこんで、レイアウト設定ができるか確認してみる。
  また、ページ詳細編集で、テンプレートを編集できるかも確認してみる。
  テンプレートの保存に失敗する場合は、tplファイルのパーミッションを666にしてみる。

7.html/contact/repair.php がブラウザから表示できるか確認。
  念のため、メールが飛ぶか、テストデータを入力してみると良い。

8.今回のサンプル設定だと、メールは既存のお問い合わせメールのテンプレートを使用して送られます。
  追加したメールフォーム専用のメールテンプレートが使いたい場合は、「メールテンプレートを追加したい」を参考に、
  新規メールテンプレートを作成してください。その新規メールテンプレートのIDが仮に6だとすると、
  data/class/pages/contact/LC_Page_Contact_Repair.php の最終行付近を以下のように修正すると、
  追加したメールテンプレートが使用できるようになります。
  なお、メールテンプレートのIDは、システム設定>マスターデータ管理>mtb_mail_template で確認できます。

    function lfSendMail(&$objPage){
        $CONF = SC_Helper_DB_Ex::sfGetBasisData();
        $objPage->tpl_shopname = $CONF['shop_name'];
        $objPage->tpl_infoemail = $CONF['email02'];
        $fromMail_name = $objPage->arrForm['name01']['value'] ." 様";
        $fromMail_address = $objPage->arrForm['email']['value'];
        $helperMail = new SC_Helper_Mail_Ex();
        $helperMail->sfSendTemplateMail(
            $objPage->arrForm['email']['value'],            // to
            $objPage->arrForm['name01']['value'] .' 様',    // to_name
            6,                                              // template_id <=ここを修正する
            $objPage,                                       // objPage
            $CONF['email03'],                               // from_address
            $CONF['shop_name'],                             // from_name
            $CONF['email02'],                               // reply_to
            $CONF['email02']                                // bcc
        );
    }

  とりあえずPCの例を挙げたので、モバイルやスマホで同様にフォームを追加する場合は、
  データベースの dtb_pagelayout に、モバイルとスマホ用のレコードを挿入する必要があります。
  また、モバイルとスマホ用のtplファイルが必要ですね。