logo

Select Sidearea

Populate the sidearea with useful widgets. It’s simple to add images, categories, latest post, social media icon links, tag clouds, and more.
hello@youremail.com
+1234567890
 

EC-CUBE4プラグインで新規作成したメールテンプレートファイルを連動させる方法

EC-CUBE4プラグインで新規作成したメールテンプレートファイルを連動させる方法

EC-CUBE4プラグインで、カスタマイズしたmail_templateファイルを連動させる方法をご紹介します。

例として、問合せフォームの問合せ受付メールと連動させます。

ここでは、本サイトで既にご紹介している問合せフォームの複製を利用する形でご紹介します。

 

・以下の記事を参考に、プラグインの雛形を作成してください。※既に作成済みの方は省略してください。

EC-CUBE4プラグインの雛形の作成方法はこちら

 

・以下の記事を参考に、作成したプラグインの雛形内に問合せフォームを複製してください。※既に作成済みの方は省略してください。

EC-CUBE4 問合せフォーム複製方法はこちら

 

・以下のファイルを指定のフォルダーにコピーしてください。(本記事では、例としてプラグインフォルダー名の部分をHogePluginとしています。)

パス:src/Eccube/Service/MailService.php

⇒app/Plugin/HogePlugin/Serviceフォルダー内

※Serviceフォルダーは無ければ作成する。

 

・メールテンプレートファイルを作成してください。

ここでは、問合せフォームのメールテンプレートファイル×2種類(HTMLメール用・テキストメール用)をコピーし、それらのファイルと連動させます。

・パス:src/Eccube/template/default/Mail/contact_mail.twigおよびcontact_mail.html.twig

⇒app/Plugin/HogePlugin/Resource/template/ 命名自由フォルダー内にコピーしてください。(本記事ではmailフォルダーとします。)※無いフォルダーは新たに作成する。

・ファイル名のみ変更してください。(例:my_contact.mail.twig および my_contact_mail.html.twig)

※ファイル名は両ファイルとも、twigもしくはhtml.twig以前は必ず共通の名称にしてください。それぞれを別の名称にしてしまうと、MailServiceのgetHtmlTemplateメソッドの部分でエラーになります。

 

・Config.phpの変更点

・plg_…_configテーブルを作成します(今回はplg_hoge_plugin_configとします)。

・idとnameカラムがデフォルトで設定されていますが、新たに以下の2カラムを追加します。

1.dtb_mail_template テーブルから、該当のメールテンプレートファイルのidを取得するカラム。※今回、そのカラム名をmail_template_id とする。

2.連動するmail_templateファイルを検索するためのカラム。※今回、そのカラム名を、kensakuとする。

※nameカラムは無意味なカラムになっていますが、削除すると変更箇所がさらに増えるため、今回は残します。

・Config.phpの修正箇所は以下のファイルに全て記載しています。※行数の記載があるが、修正するうちに行がずれるため、初期の行数で表示。

Config.phpの修正箇所はこちら

 

・PluginManager の変更点

PluginManager.phpを以下のファイルのように作成し、プラグインフォルダー直下に保存してください。

また、既に本ブログの記事を見てPluginManager.phpを作成された方もソースコードが大幅に変わっているので、以下のファイルのように修正してください。

PluginManager.phpソースコードはこちら

 

ここで重要なのは、dtb_mail_templateの新規レコードのid と plg_hoge_plugin_configテーブルのmail_template_id の数値を一致させることです。

・有効化時に先にcreateMailTemplateメソッドが実行され、dtb_mail_templateテーブルに新規作成したメールテンプレートファイルのレコードが作成される。
⇒その処理が終了次第、createConfigメソッド内の以下のコードを実行され、dtb_mail_templateの新規レコードのidを取得する。
.
$mailTemplateRepository = $container->get(MailTemplateRepository::class);
// 値が変動しないfile_nameカラムの値をもとにdtb_mail_templateの新規レコードを検索し、$mailTemplateに代入する。
$mailTemplate = $mailTemplateRepository->findOneBy([“file_name” => $this::ADD_MAIL_TEMPLATE_FILE_NAME]);
// dtb_mail_templateの新規レコードのidを取得し、その値を$last_insert_idに代入する。
$last_insert_id = $mailTemplate->getId();
.
・こうして取得されたdtb_mail_templateの新規レコードのidを以下のコードで設定する。
$config->setMailTemplateId($last_insert_id);
.
これまでの一連の作業によって、2つのカラムの値は必す同じ数値になります。
.
・ContactController.phpの変更点
・20行目、use Eccube\Service\MailService; を use Plugin\HogePlugin\Service\MailService; に変更してください。
.

・MailService.php の変更点

・MailService.phpファイルを以下のファイルのように修正してください。

MailService.phpソースコードはこちら

ここで修正したのは、大きく分けて以下の4点です。

①問合せフォームに不要な大半のコードの削除。(残したままでも動きますが、そのままでは見辛いので整理します。)

②namespaceの変更。

③ConfigRepository.phpを使用するにあたって必要なコード一式追加。

④送信するお問合せ受付メールのテンプレートを、新規作成したメールテンプレートファイルで設定する。

 

①問合せフォームに不要な大半のメソッドの削除。

sendContactMailメソッドとgetHtmlTemplate以外の全てのメソッドを削除。

不要なメソッドは会員登録や受注時など、お問い合わせとは無関係のものになります。

不要なメソッドは残したままでも動きますが、コードを見やすくするために整理します。

②namespaceの変更。

・Plugin\HogePlugin\Service; に変更する。

③ConfigRepository.phpを使用するにあたって必要なコード一式追加。

・use Symfony\Component\EventDispatcher\EventDispatcherInterface; の下に、以下のコードを追加する。

use Plugin\HogePlugin\Repository\ConfigRepository; を追加する。

・protected $twig; の下に、以下のコードを追加する。

    /**
     * @var ConfigRepository
     */
    protected $configRepository;
・* @param EccubeConfig $eccubeConfig の下に、以下のコードを追加する。
* @param ConfigRepository $configRepository
・ EccubeConfig $eccubeConfig の下に、以下のコードを追加する。
ConfigRepository $configRepository
・ EccubeConfig $eccubeConfig の最後に , を追加する。
・$this->twig = $twig; の下に、以下のコードを追加する。
$this->configRepository = $configRepository;
④送信するお問合せ受付メールのテンプレートを、新規作成したメールテンプレートファイルで設定する。

・sendContactMailメソッド内の以下のコードを削除。

$MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig[‘eccube_contact_mail_template_id’]

・削除した場所に、以下の3行の追加。

$config = $this->configRepository->findOneBy([“kensaku” => ‘search_mail_template’]);
$mail_template_id = $config->getMailTemplateId();
$MailTemplate = $this->mailTemplateRepository->find($mail_template_id);

 

以上の方法で、自分でカスタマイズしたメールテンプレートファイルと連動させることができます。