Labo

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

2011年09月18日 / 投稿者名:fukap


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 に、以下のような感じで新規レコードを入力

 

     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()

 

  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ファイルが必要ですね。

[EC-CUBE 2.11.2] お問い合わせフォームを追加したい への6件のコメント

  1. ピンバック: [EC-CUBE 2.11.2] お問い合わせフォームに会社名を追加したい | NAKWEB × EC-CUBE

  2. ピンバック: お問い合せフォームを追加する|EC-CUBE 2.11.5 | デビログ

  3. ピンバック: ECCUBEで売り切れ商品の入荷希望リクエストフォームを作成 | 戯れ問答

  4. numa より:

    こんにちは。2.13系と使って、ショップサイトのカスタマイズを行っています。
    オリジナルのデザインテンプレートを作ったので、
    お問い合わせフォームをこちらのやり方を参考に、デフォルトをコピーして、
    名称変更して作成しました。

    ページは問題なく表示されたのですが、テストで項目を入力して、いざ確認ボタンを
    押すとページ遷移しません。タイトル部分だけ、「お問い合わせ(入力ページ)」から
    「お問い合わせ(確認ページ)」には変わっているだけです。

    何か他に設定変更するファイルがあるのでしょうか?

    • 88mz51 より:

      numa様

      コメントありがとうございます。
      頂きました状況について調査をさせていただきますので少々お待ち頂けますでしょうか?

    • 88mz51 より:

      通常のclassファイルの編集はされておられますでしょうか?
      特に今回numa様がご質問されておられます内容ですと、確認画面へformした時、つまり$this->getMode()へと渡される値がconfirmの時、読み込むテンプレートの指定が出来ていない可能性がございます。

      $this->tpl_mainpage = 'contact/confirm.tpl';

      お問い合わせフォームのもともとのclassファイルの中には上記の記述がございますが、こちらにて新たに作成された確認ページのテンプレートファイルを読み込ませるようにすればちゃんと画面が遷移するかと思われます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

* Copy This Password *

* Type Or Paste Password Here *

*

コメント欄にコードを挿入したい場合は、[php][/php] を使ってください。