我有大约50种不同的电子邮件模板,其文本根据收件人的身份动态变化。不是为每个可能的案例制作不同的模板,而是在几十个不同的控制器文件中包含类似的逻辑,我想在每个模板中包含一些案例切换,并将案例确定变量应用于每个电子邮件。
例如,典型的模板可能如下所示:
<? if ($case) { ?>
<p> text variation 1 </p>
<? } else { ?>
<p> text variation 2 </p>
<? } ?>
$case
将由函数beforeEmail($to_address)
设置,该函数根据收件人电子邮件执行案例的所有计算。每个电子邮件的这些计算都是相同的。每次发送电子邮件时如何才能调用beforeEmail()
?或者更准确地说,我在哪里放置beforeEmail()
函数?
通常我会在视图文件控制器中粘贴这种代码,但电子邮件视图文件没有控制器。我曾经在某处创建beforeEmail()
静态函数并在每个视图文件中调用它,但这看起来很麻烦和错误(它让我在视图文件中调用函数,并在50多个文件中复制代码)
编辑:我也尝试在布局文件中设置$case
变量,但事实证明在电子邮件视图文件之后加载了布局,因此在布局中设置的变量不能在视图文件中使用。
答案 0 :(得分:0)
如果有人遇到类似问题,我最终修改了CakeEmail核心库send()方法。虽然它并不理想,但这是我能找到的唯一方法来获得我想要的行为(无需在任何地方创建重复的代码)。
不起作用的事情:
-Callbacks / events - CakeEmail类不提供回调。
- 创建自定义传输 - 在呈现电子邮件后,传输称为。
- 在公共布局文件中输入代码 - 在呈现电子邮件的视图文件后,将显示的布局。