Because We Love Happy Coding

フリーライターからエンジニア × 講師。発信力だけあり余ってる感じ

ECCUBE3で受注確認メールの内容を修正する

今日もまたコーディング。だって僕らはHappy Codingが大好きだから。

目次

受注確認のメールにプラグインから手を入れたい。普通のテンプレートイベントと似て少々異なるので、手順を調べるのに戸惑った。イベントmail.orderをフックする。共通フックポイントとか呼ばれるものらしい。一次資料の共通フックポイント一覧には見当たらないけど……。

環境

event.yml

イベントmail.orderを記述。

##  メール通知
mail.order:
  - [onMailOrderComplete, NORMAL]

EVENTファイル

EVENTファイルの中で、メール本文を取得して書き換える。テンプレートイベントではないので、setParameters()して変数で渡すというわけにはいかないみたい。テンプレートイベントがあると書きやすいんだけどなぁ。あるのかしら。

preg_match_all()の第一引数は正規表現パターンで、PHPではデリミタ/で前後を挟み、UFT-8では最後にuをつける。

PHP_EOLは改行\nの置き換えとして定数定義されているみたい。

public function onMailOrderComplete(EventArgs $event)
{
    // メールボディ取得
    $body = $message->getBody();

    // 置換されるテキストを検索する
    $search = array();
    preg_match_all('/some text to be replaced/u', $body, $search);

    //置換するテキスト
    $replace = 'some text to place'.PHP_EOL;

    $body = preg_replace('/'.$search[0][0].'/u', $replace, $body);

    // メッセージにメールボディをセット
    $message->setBody($body);
}