受注メールや確認メールなど、ヘッダーに購入者の名前を入れたいなーという時がありますよね。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, )); }
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。