受注メールや確認メールなど、ヘッダーに購入者の名前を入れたいなーという時がありますよね。Mail/order.twigをいじってもいいのですが、いちいちテンプレートファイルを編集するのは手間なのでヘッダーでテンプレートごとに変更できたらなーという時がよくあります。

そんな時に使える方法がヘッダーにtwigを書いてOrder変数を動的に使えるようにしてしまうことです。色々なやり方がありますが一例をご紹介します。

カート注文時の受注メール

MailServiceのsendOrderMailメソッド、sendAdminOrderMailでヘッダーのtwigをコンパイルしてから本文の生成に渡してやります。

$MailTemplate = $this->app['eccube.repository.mail_template']->find(1);
$template = $this->app['twig']->createTemplate($MailTemplate->getHeader());
$header = $template ->render([
'Order' => $Order,
]);

$body = $this->app->renderView($MailTemplate->getFileName(), array(
‘header’ => $header,
‘footer’ => $MailTemplate->getFooter(),
‘Order’ => $Order,
));

管理画面の受注メールフォーム

次に管理画面から受注メールフォームを送信する場合には、メール送信フォームのヘッダー部分に最初からコンパイルしたものを渡してやります。

$template = $app['twig']->createTemplate($MailTemplate->getHeader());
$header = $template ->render([
'Order' => $Order,
]);
$form->get('header')->setData($header);

管理画面の一括送信にも対応

一括送信に対応するにはMailControllerのcreateBodyメソッドにもtwigのコンパイルを実装します。

private function createBody($app, $header, $footer, $Order)
{
$template = $app['twig']->createTemplate($header);
$header = $template ->render([
'Order' => $Order,
]);

return $app->renderView('Mail/order.twig', array(
'header' => $header,
'footer' => $footer,
'Order' => $Order,
));
}