EC-CUBE4には初期設定として、dtb_mail_template テーブルに以下のメールテンプレートが用意されています。
この中でも受注管理からメールを送信する時に選択できるメールテンプレートは注文受付メール(ご注文受付時に自動返信されるメール)のみとなります。
自動返信とは別にご注文の正式決定メール(ご注文承諾メール)を選択できるようにしたいと思い「メール設定 eccube 追加」と検索して調べてみましたところ、以下の記事がとても参考になりました。
私と同じようにEC-CUBE4にメールテンプレートを作成したい方は、上記の記事をまずはご覧いただきましてその上でこの記事もご覧いただきますと幸いです。
以下実際に行ったことを記述していきます。
PHPMyAdminにログインしてdtb_mail_templateテーブルを開くと、次のようなフィールドを見ることができます。
今回は「ご注文承諾メール」を新規テンプレートとして追加することが目的ですので、phpMyAdminの上部メニュー「挿入」を押して項目を追加します。
追加する項目は以下の通りです。
key | value |
---|---|
id | 空 |
creater_id | NULLにチェック |
name | ご注文承諾メール |
file_name | Mail/order-accept.twig |
mail_subject | ご注文確定のお知らせ |
create_date | 空 |
upadate_date | 空 |
discriminator_type | mailtemplate |
nameにはテンプレートの名前となりますので、管理画面でわかりやすい名前をつけます。
file_nameはEC-CEUBE4に適用しているテーマディレクトリに入れるTwigテンプレートの名前となります。通常ではMailディレクトリ以下に設置するのでしょう。
mail_subjectはテンプレートを呼び出した時に件名に反映される文字列です。
discriminator_typeはmailtemplateとします。
id:21 として設定されていますので、この21の数字は忘れずに覚えておきます。
以上でphpMyAdmin側の追加は完了です。
phpMyAdminにて追加したfile_nameに指定したディレクトリ/ファイル名.twigを設置します。設置するディレクトリは以下となります。
/app/template/現在有効化しているテンプレート/Mail/order-accept.twig
order-accept.twigの記載内容については今回は記述しませんが、注文受付メール(order.twig)を参考にメール本文を作成します。
ここまでの設定が管理すると、店舗設定 > メール設定 画面のテンプレート編集からテンプレートを呼び出すことが可能になります。
しかし、これだけでは受注管理 > 受注一覧 > 受注内容からメール作成(受注管理 > メール通知)から呼び出せません。
「メール設定 eccube 追加」と検索して出てくる記事の多くは、EC-CUBEコアファイルを編集する方法をご紹介されていましたが、先ほど紹介しました、「EC-CUBE4.0.5 受注登録のメールテンプレートを追加・選択するカスタマイズ」の記事はコアファイルを触らずにカスタマイズファイルの仕組みを利用されていましたので、私もその方法を採用することにしました。
/app/config/eccube/packages/customize.yamlというファイルを作成し設置します。
parameters:
eccube_order_accept_mail_template_id: 21
eccube_order_accept_mail_template_idの定数として 21を指定します。
この数字はdtb_mail_templateにて追加した項目のid番号です。
(ご自身の環境のid番号に合わせて編集してください)
/app/Customize/Form/Extension/OrderMailTypeExtension.php というファイルを作成し設置します。
「EC-CUBE4.0.5 受注登録のメールテンプレートを追加・選択するカスタマイズ」の記事をほとんど利用させていただきました。ソースは以下となります。
<?php
/*
* This file is part of EC-CUBE
*
* Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
*
* http://www.ec-cube.co.jp/
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Customize\Form\Extension;
use Doctrine\ORM\EntityRepository;
use Eccube\Common\EccubeConfig;
use Eccube\Form\Type\Admin\OrderMailType;
use Eccube\Form\Type\Master\MailTemplateType;
use Eccube\Form\Validator\TwigLint;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints as Assert;
class OrderMailTypeExtension extends AbstractTypeExtension
{
/**
* @var EccubeConfig
*/
protected $eccubeConfig;
/**
* MailType constructor.
*
* @param EccubeConfig $eccubeConfig
*/
public function __construct(
EccubeConfig $eccubeConfig
) {
$this->eccubeConfig = $eccubeConfig;
}
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$templateIds = [
$this->eccubeConfig['eccube_order_mail_template_id'],
$this->eccubeConfig['eccube_order_accept_mail_template_id']
];
$builder
->add('template', MailTemplateType::class, [
'required' => false,
'mapped' => false,
'query_builder' => function (EntityRepository $er) use ($templateIds) {
return $er->createQueryBuilder('mt')
->andWhere('mt.id IN (:id)')
->setParameter(':id', $templateIds, \Doctrine\DBAL\Connection::PARAM_INT_ARRAY)
->orderBy('mt.id', 'ASC');
},
])
;
}
/**
* {@inheritdoc}
*/
public function getExtendedType()
{
return OrderMailType::class;
}
}
以上の作業が完了し、すべてのファイルが設置(アップロード)されている状態で、受注管理 > 受注一覧 > 受注内容からメール作成(受注管理 > メール通知)から呼び出しすることが可能となりました。
以上ですが、今回は参考サイトを見様見真似で作業を行い、注文承諾メールを追加しました。
今回参考にさせていただいたサイトでは、$templateIdsに配列を入れる手法を取られていましたので、さらにメールテンプレートを追加したいという要望にも対応ができそうだと思いました。
例えば注文承諾メールを追加した状態では以下のソースコードとなりますが、
$templateIds = [
$this->eccubeConfig['eccube_order_mail_template_id'],
$this->eccubeConfig['eccube_order_accept_mail_template_id']
];
お問い合わせ返信メール、を追加したい場合は
の流れの作業は行うのですが、4のカスタマイズ用のExtensionを追加する、の箇所が、以下のように追記するだけでよくなりますので、メンテナンスも楽になりそうです。
$templateIds = [
$this->eccubeConfig['eccube_order_mail_template_id'],
$this->eccubeConfig['eccube_order_accept_mail_template_id']
$this->eccubeConfig['eccube_contact_mail_template_id']
];
以上、備忘録を兼ねまして記事を執筆しました。
参考にさせていただいたサイトに感謝申し上げます。