【EC-CUBE 4】メールテンプレートを増やす方法

この記事では、新規にメールテンプレートを作成し、管理画面で修正したり送信したりする方法を紹介します。

新規メールテンプレート追加後のメール設定画面
メール設定画面
新規メールテンプレート追加後の受注登録画面
受注管理画面

カスタマイズの流れ

  1. メールテンプレートの格納テーブル(dtb_mail_template)に新規テンプレートを追加(こちら
  2. メールテンプレートの中身を構成するTwigファイルを作成(こちら
  3. 受注管理画面からメールを飛ばせるようにする(こちら
    • EC-CUBE 4.3.0 では対応不要になりました。
開発前にデバッグモードの設定をお薦めします

デバッグモードを設定しておくと、エラーが起きたときに詳細情報が表示されるようになります。
エラー箇所を探しやすくなるので、開発前に設定しておくのをオススメします。
デバッグモードの設定方法については 以下記事 で解説しています。

カスタマイズ後は、デバッグモードの解除を忘れないように。

【動作環境】
EC CUBEのバージョン:4.3.0
サーバー:XServer

STEP

メールテンプレートの格納テーブル(dtb_mail_template)に新規レコードを追加

まず、データベースにあるメールテンプレートを管理するテーブル『dtb_mail_template』に、新規レコードを追加します。

メールテンプレートが保存されているテーブル(dtb_mail_tamplate)
dtb_mail_template(テーブル修正前)

レコードの追加は、既存のレコード(テンプレート)をコピーすると間違いがないです。

dtb_mail_tamplateに新しくレコードを追加する
新規レコードを挿入します。

今回は以下のように入力しました。

name

注文受け付けメール(2)

file_name

Mail/order2.twig

mail_subject

ご注文を受け付けました

一番下の「discriminator_type」には、必ず『mailtemplate』と記述してください。

dtb_mail_tamplateにレコード追加後
新規レコードの追加が完了しました。
STEP

メールテンプレートの中身を構成するTwigファイルを作成

テーブルにレコード追加後は、テンプレートの中身を作成したファイルをサーバーにアップします。

テンプレートは一から自分で作っても良いですが、既存テンプレートをコピーした方が作りやすいです。既存のメールテンプレートは「src/Eccube/Resource/template/default/Mail」に保存されており、この中にあるテンプレートの一部を「app/template/default/Mail」にコピーします。
Mailフォルダがない場合は、フォルダも作成します。

コピーしたファイルは、データベース上のファイル名に修正するのを忘れないように。
(テンプレート追加時に記入した『file_name』の「Mail/」より後ろに合わせます。)

このとき、既存のテンプレートには「XXX.twig」と「XXX.html.twig」という2種類がセットになっています。メールの形式によって分かれており、前者はテキスト、後者はHTMLの内容を設定するファイルです。既存テンプレートを両方とも複製し、コードを修正して保存します。

テンプレート追加後のファイルサーバー
メールテンプレートのTwigファイルを2つ追加しました。
STEP

受注管理画面からメールを飛ばせるようにする

EC-CUBE 4.3.0では不要になりました。
STEP2まででメール送信もできます。

STEP2までで、管理画面のメール設定から、追加したテンプレートの選択および修正ができるようになっているはずです。

新規メールテンプレート追加後のメール設定画面
選択できるテンプレートが増えており、修正もできます。

これだけでもOKなのですが、受注管理から受注毎にメールを飛ばせるようにするには、もう1つファイルを操作しなければなりません。

「src/Eccube/Form/Type/Admin」下にある『OrderMailType.php』を開き、55〜56行目をコメントアウトします。

->add('template', MailTemplateType::class, [
    'required' => false,
    'mapped' => false,
    'query_builder' => function (EntityRepository $er) {
        return $er->createQueryBuilder('mt')
            // ->andWhere('mt.id = :id')
            // ->setParameter('id', $this->eccubeConfig['eccube_order_mail_template_id'])
            ->orderBy('mt.id', 'ASC');
    },
])

上記コードは一部のみを抜粋しています。

これで、受注管理のメール選択にすべてのテンプレートが表示されるようになります。

新規メールテンプレート追加後の受注登録画面
「注文受付メール」以外に、追加した分を含めて全てのテンプレートが選択できるようになりました。

適切なテンプレートを選択しないとエラーが表示されます。

以上、メールテンプレートを新規に作成する方法を紹介しました。

「入金確認メール」など、デフォルトでは備わっていないテンプレートを作ったり、既存のテンプレートは残したまま別のテンプレートを用意したい場合などに、ぜひ活用してみてください。


よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次