0

受信者に基づいてテキストが動的に変化する約 50 の異なる電子メール テンプレートがあります。考えられるすべてのケースに対して異なるテンプレートを作成し、数十の異なるコントローラー ファイルに同様のロジックを含めるのではなく、各テンプレート内にケースの切り替えを含め、ケースを決定する変数をすべてのメールに適用したいと考えています。

たとえば、典型的なテンプレートは次のようになります。

<? if ($case) { ?>
    <p> text variation 1 </p>
<? } else { ?>
    <p> text variation 2 </p>
<? } ?>

$casebeforeEmail($to_address)受信者の電子メールに基づいてケースのすべての計算を行う関数によって設定されます。これらの計算は、すべてのメールで同じです。beforeEmail()メールが送信されるたびに呼び出されるようにするにはどうすればよいですか? より正確には、関数をどこに配置すればよいでしょうか?beforeEmail()

通常、この種のコードはビュー ファイル コントローラーに貼り付けますが、電子メールのビュー ファイルにはコントローラーがありません。どこかで静的関数を作成しbeforeEmail()て各ビューファイルで呼び出してみましたが、それは面倒で間違っているようです (ビューファイル内での関数呼び出しと、50 以上のファイルでのコードの重複が残ります)。

編集:$caseレイアウトファイルで変数を設定しようとしましたが、電子メールビューファイルの後にレイアウトが読み込まれることが判明したため、レイアウト内に設定された変数はビューファイルで使用できません。

4

1 に答える 1

0

誰かが同様の問題を抱えている場合に備えて、コアの CakeEmail ライブラリの send() メソッドを変更しました。理想的ではありませんが、これが私が望む動作を実現する唯一の方法でした (どこにでも重複するコードを作成する必要はありません)。

動作しないもの:

-コールバック/イベント - CakeEmail クラスはコールバックを提供しません。

-カスタム トランスポートの作成 -電子メールがレンダリングされた後にトランスポートが呼び出されます。

-共通レイアウト ファイルにコードを配置する -メールのビュー ファイルがレンダリングされた後に、レイアウトがレンダリングされます。

于 2015-10-14T04:27:02.503 に答える