Labo

EC-CUBE3 分室

【3.0.15】お問い合わせのカスタマイズ

2017年12月23日 / 投稿者名:chiharu


今回は社内からの質問についての返答です。
内容としては以下の物でした。
 
 EC-CUBE3 でお問い合わせ内容の項目を変更したい。
 
何処かがプラグインを作っていそうなのですが無料では見当たらない様です。
お問い合わせ関係はお問い合わせの内容を管理するプラグインが多く、項目変更は見当たらないとのことでした。
・・・これは会社のプラグインとして発表するチャンスかな(笑)
 
とは云え今回の案件は短納期の為、本体のカスタマイズでも良いのとのことです。
まぁ、それであれば本体をカスタマイズしてしまいましょう。
 
担当から状況を確認したところ、とりあえず入力画面のテンプレートから任意項目を削除したが確認ページへ遷移しないとのことです。
まぁ、良くも悪くも EC-CUBE 2系との違いですね。
EC-CUBE 2系であれば簡単な部類なカスタマイズなんですが、3系の場合ある程度変更が必要なようですね。
 
今回の変更項目については以下のようなものでした。
 
 ■項目の追加
  ・会社名【任意】
 
 ■項目の削除
  ・お名前(フリガナ)【任意】
  ・住所(郵便番号・都道府県・住所)【任意】
  ・電話番号【任意】
 
追加項目はともかく削除に関しては任意項目のため非表示で対応できると考えたそうです。
しかし、結果として buildForm の項目を触らないといけないようです。
 
 ・
 ・
 ・
 
対応内容は以下のようになりました。
取り急ぎ、これでメールフォームの変更完了です。
 
 
1.フォーム内容の設定
 ●ファイル
  <インストールフォルダ>/src/Eccube/Form/Type/Front/ContactType.php
 ●モジュール
  buildForm
 ●参考行目
  40行目ぐらいから
 ●変更内容

    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', 'name', array(
                'required' => true,
            ))
            ->add('kana', 'kana', array(
                'required' => false,
            ))
            ->add('zip', 'zip', array(
                'required' => false,
            ))
            ->add('address', 'address', array(
                'required' => false,
            ))
            ->add('tel', 'tel', array(
                'required' => false,
            ))
            ->add('email', 'email', array(
                'required' => true,
                'constraints' => array(
                    new Assert\NotBlank(),
                    new Assert\Email(array('strict' => true)),
                ),
            ))
            ->add('contents', 'textarea', array(
                'help' => 'form.contact.contents.help',
                'constraints' => array(
                    new Assert\NotBlank(),
                ),
            ));
    }

 ↓

    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('company_name', 'text', array(
                'required' => false,
            ))
            ->add('name', 'name', array(
                'required' => true,
            ))
            ->add('email', 'email', array(
                'required' => true,
                'constraints' => array(
                    new Assert\NotBlank(),
                    new Assert\Email(array('strict' => true)),
                ),
            ))
            ->add('contents', 'textarea', array(
                'help' => 'form.contact.contents.help',
                'constraints' => array(
                    new Assert\NotBlank(),
                ),
            ));
    }

 ●概要説明
  不要部分の削除と「会社名」の追加をしています。
  EC-CUBE の場合には会員情報に「会社名」が存在する為、変数名を「company_name」で統一しています。
  入力内容は「text」タイプです。
  後は”任意項目”とするため「required」を「false」としています。

            ->add('company_name', 'text', array(
                'required' => false,
            ))

  この辺りを色変更すると独自の入力項目を作成できますのでお試しください(笑)
 
 
2.お問い合わせ入力画面の変更
 ●ファイル
  <インストールフォルダ>/src/Eccube/Resource/template/default/Contact/index.twig
  ※「<インストールフォルダ>/app/template/default/Contact」に複製してから作業するようにしましょう。
 ●テンプレート
  テンプレートファイル top_box__body_inner内
 ●参考行目
  50行目ぐらいから
 ●変更内容

                            <div id="top_box__body_inner" class="dl_table">
                                <dl id="top_box__name">
                                    <dt>{{ form_label(form.name) }}</dt>
                                    <dd class="form-group input_name">
                                        {{ form_widget(form.name.name01) }}
                                        {{ form_widget(form.name.name02) }}
                                        {{ form_errors(form.name.name01) }}
                                        {{ form_errors(form.name.name02) }}
                                    </dd>
                                </dl>
                                <dl id="top_box__kana">
                                    <dt>{{ form_label(form.kana) }}</dt>
                                    <dd class="form-group input_name">
                                        {{ form_widget(form.kana.kana01) }}
                                        {{ form_widget(form.kana.kana02) }}
                                        {{ form_errors(form.kana.kana01) }}
                                        {{ form_errors(form.kana.kana02) }}
                                    </dd>
                                </dl>
                                <dl id="top_box__address_detail">
                                    <dt>{{ form_label(form.address) }}</dt>
                                    <dd>
                                        <div id="top_box__zip" class="form-group form-inline input_zip {% if form.zip.zip01.vars.errors is not empty or form.zip.zip02.vars.errors is not empty %}has-error{% endif %}">{{ form_widget(form.zip) }}</div>
                                        <div id="top_box__address" class="{% if form.address.pref.vars.errors is not empty or form.address.addr01.vars.errors is not empty or form.address.addr02.vars.errors is not empty %}has-error{% endif %}">
                                            {{ form_widget(form.address) }}
                                            {{ form_errors(form.address) }}
                                        </div>
                                    </dd>
                                </dl>
                                <dl id="top_box__tel">
                                    <dt>{{ form_label(form.tel) }}</dt>
                                    <dd>
                                        <div class="form-inline form-group input_tel">
                                            {{ form_widget(form.tel, {attr : {class : 'short'}}) }}
                                            {{ form_errors(form.tel) }}
                                        </div>
                                    </dd>
                                </dl>
                                <dl id="top_box__email">
                                    <dt>{{ form_label(form.email) }}</dt>
                                    <dd>
                                        <div class="form-group">
                                            {{ form_widget(form.email) }}
                                            {{ form_errors(form.email) }}
                                        </div>
                                    </dd>
                                </dl>
                                <dl id="top_box__contents">
                                    <dt>{{ form_label(form.contents) }}</dt>
                                    <dd>
                                        <div class="column">
                                            {{ form_widget(form.contents) }}
                                            {{ form_errors(form.contents) }}
                                        </div>
                                    </dd>
                                </dl>
                            </div>

 ↓

                            <div id="top_box__body_inner" class="dl_table">
                                <dl id="top_box___company_name">
                                    <dt>{{ form_label(form.company_name) }}</dt>
                                    <dd class="form-group">
                                        {{ form_widget(form.company_name) }}
                                        {{ form_errors(form.company_name) }}
                                    </dd>
                                </dl>
                                <dl id="top_box__name">
                                    <dt>{{ form_label(form.name) }}</dt>
                                    <dd class="form-group input_name">
                                        {{ form_widget(form.name.name01) }}
                                        {{ form_widget(form.name.name02) }}
                                        {{ form_errors(form.name.name01) }}
                                        {{ form_errors(form.name.name02) }}
                                    </dd>
                                </dl>
                                <dl id="top_box__email">
                                    <dt>{{ form_label(form.email) }}</dt>
                                    <dd>
                                        <div class="form-group">
                                            {{ form_widget(form.email) }}
                                            {{ form_errors(form.email) }}
                                        </div>
                                    </dd>
                                </dl>
                                <dl id="top_box__contents">
                                    <dt>{{ form_label(form.contents) }}</dt>
                                    <dd>
                                        <div class="column">
                                            {{ form_widget(form.contents) }}
                                            {{ form_errors(form.contents) }}
                                        </div>
                                    </dd>
                                </dl>
                            </div>

 ●概要説明
  不要部分の削除と「会社名」の追加をしています。
  EC-CUBE の場合には「company_name」の情報が会員情報用に作成されている為、標準の場合は以下の記述で「会社名」と表示されます。

{{ form_label(form.company_name) }}

項目名が異なる場合は以下の形で良いと思います。

<dt>表示させたい項目名</dt>

 
 
3.お問い合わせ入力内容確認画面の変更
 ●ファイル
  <インストールフォルダ>/src/Eccube/Resource/template/default/Contact/confirm.twig
  ※「<インストールフォルダ>/app/template/default/Contact」に複製してから作業するようにしましょう。
 ●テンプレート
  テンプレートファイル confirm_box__body_inner内
 ●参考行目
  41行目ぐらいから
 ●変更内容

                            <div id="confirm_box__body_inner" class="dl_table">
                                <dl id="confirm_box__name">
                                    <dt>{{ form_label(form.name) }}</dt>
                                    <dd class="form-group">
                                        {{ form_widget(form.name.name01) }}
                                        {{ form_widget(form.name.name02) }}
                                    </dd>
                                </dl>
                                <dl id="confirm_box__kana">
                                    <dt>{{ form_label(form.kana) }}</dt>
                                    <dd class="form-group">
                                        {{ form_widget(form.kana.kana01) }}
                                        {{ form_widget(form.kana.kana02) }}
                                    </dd>
                                </dl>
                                <dl id="confirm_box__address">
                                    <dt>{{ form_label(form.address) }}</dt>
                                    <dd>
                                        <div class="form-group">
                                            {{ form_widget(form.zip) }}<br />
                                            {{ form_widget(form.address) }}
                                        </div>
                                    </dd>
                                </dl>
                                <dl id="confirm_box__tel">
                                    <dt>{{ form_label(form.tel) }}</dt>
                                    <dd>
                                        <div class="form-group">
                                            {{ form_widget(form.tel) }}
                                        </div>
                                    </dd>
                                </dl>
                                <dl id="confirm_box__email">
                                    <dt>{{ form_label(form.email) }}</dt>
                                    <dd>
                                        <div class="form-group">
                                            {{ form_widget(form.email) }}
                                        </div>
                                    </dd>
                                </dl>
                                <dl id="confirm_box__contents">
                                    <dt>{{ form_label(form.contents) }}</dt>
                                    <dd>
                                        <div class="column">
                                            {{ form_widget(form.contents) }}
                                        </div>
                                    </dd>
                                </dl>
                            </div>

 ↓

                            <div id="confirm_box__body_inner" class="dl_table">
                                <dl id="confirm_box__company_name">
                                    <dt>{{ form_label(form.company_name) }}</dt>
                                    <dd class="form-group">
                                        {{ form_widget(form.company_name) }}
                                    </dd>
                                </dl>
                                <dl id="confirm_box__name">
                                    <dt>{{ form_label(form.name) }}</dt>
                                    <dd class="form-group">
                                        {{ form_widget(form.name.name01) }}
                                        {{ form_widget(form.name.name02) }}
                                    </dd>
                                </dl>
                                <dl id="confirm_box__email">
                                    <dt>{{ form_label(form.email) }}</dt>
                                    <dd>
                                        <div class="form-group">
                                            {{ form_widget(form.email) }}
                                        </div>
                                    </dd>
                                </dl>
                                <dl id="confirm_box__contents">
                                    <dt>{{ form_label(form.contents) }}</dt>
                                    <dd>
                                        <div class="column">
                                            {{ form_widget(form.contents) }}
                                        </div>
                                    </dd>
                                </dl>
                            </div>

 ●概要説明
  不要部分の削除と「会社名」の追加をしています。
  基本的には入力画面の変更と同じようなものですね。
 
 
4.送信メール内容の変更
 ●ファイル
  <インストールフォルダ>/src/Eccube/Resource/template/default/Mail/contact_mail.twig
  ※「<インストールフォルダ>/app/template/default/Mail」に複製してから作業するようにしましょう。
 ●テンプレート
  テンプレートファイル 「■お名前 :」の辺りから
 ●参考行目
  40行目ぐらいから
 ●変更内容

■お名前 :{{ data.name01 }} {{ data.name02 }}{% if data.kana01 or data.kana02 %} ({{ data.kana01 }} {{ data.kana02 }}){% endif %} 様
■郵便番号:{% if data.zip01 and data.zip02 %}〒{{ data.zip01 }} - {{ data.zip02 }}{% endif %}

■住所  :{% if data.pref.name is defined %} {{ data.pref.name }}{% endif %}{{ data.addr01 }}{{ data.addr02 }}
■電話番号:{{ data.tel01 }} - {{ data.tel02 }} - {{ data.tel03 }}
■メールアドレス:{{ data.email }}
■お問い合わせの内容

{{ data.contents }}

 ↓

■会社名 :{{ data.company_name }}
■お名前 :{{ data.name01 }} 様
■メールアドレス:{{ data.email }}
■お問い合わせの内容

{{ data.contents }}

 ●概要説明
  不要部分の削除と「会社名」の追加をしています。
  ちなみに管理者向けにも同じ内容のメールが送信される形です。
 
 
・・・という感じですね。
細かいところまでは確認できていませんが、メールが届くことは確認できたので良しとしましょう(笑)
本当はログインしている時用の処理やチョットした情報もあるるのですが、大分長くなったのでここで一区切りです。
 
 
残りの処理に関しては次回に持ち越しとさせて頂きます(笑)
と云うことでお問い合わせの項目変更についてでした。

コメントを残す

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

* Copy This Password *

* Type Or Paste Password Here *

*

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