SilverStripe默认电子邮件样式

SilverStripe默认电子邮件样式,silverstripe,Silverstripe,SilverStripe 3是否可以创建一个默认的电子邮件模板/样式,应用于所有已发送的电子邮件,而不必单独覆盖每个电子邮件模板 理想情况下,这可以作为主题的一部分 我尝试定义一个自定义GenericEmail.ss模板,但到目前为止它被忽略了 查看框架源代码,创建一个自定义的Email类并重写parseVariables()可能会实现它,但这似乎有点过头了?在刚才尝试之后,可以使用自定义模板有效地重写默认的电子邮件模板。我把我的放在主题的“模板”文件夹下(而不是任何子文件夹),即 /主题/my

SilverStripe 3是否可以创建一个默认的电子邮件模板/样式,应用于所有已发送的电子邮件,而不必单独覆盖每个电子邮件模板

理想情况下,这可以作为主题的一部分

我尝试定义一个自定义
GenericEmail.ss
模板,但到目前为止它被忽略了


查看框架源代码,创建一个自定义的
Email
类并重写
parseVariables()
可能会实现它,但这似乎有点过头了?

在刚才尝试之后,可以使用自定义模板有效地重写默认的电子邮件模板。我把我的放在主题的“模板”文件夹下(而不是任何子文件夹),即 /主题/mytheme/templates/GenericEmail.ss

然后在冲洗=1后进行测试(以便拾取新模板)


希望这有帮助

只要发送的电子邮件还没有模板,它看起来就可以工作。它看起来像是
Mailer->sendHTML()
检查模板是否有一个打开的
标记,如果没有,则插入一个通用包装,忽略
GenericEmail.ss
。我想您可以构建一个自定义
Mailer
并覆盖
sendHTML()
并首先修改
$htmlContent
?在缺少body标记的情况下使用的包装器负责重用$htmlContent作为body标记的内部HTML,因此它将尊重预呈现的电子邮件(在Email@parseVariables()). 在GenericEmail.ss中有一个body标记会绕过包装器,如果这是像
ChangePasswordEmail
这样的问题,它有一个默认模板,默认情况下没有
,由于它有自己的模板,所以跳过使用
GenericEmail.ss
。这时,
Mailer::sendHTML()
将其拾取并插入硬编码的html/正文设置。我现在对您的问题有了更好的理解。您希望为所有电子邮件使用自定义包装,但请继续使用开箱即用模板;我不是从最初的请求中得到的。在这种情况下,是的,在您的第二条评论中对Mailer进行子类化可能是最好的方法。然后,您可以在mysite/_config.php中使用Mailer::set_Mailer(),以便发送的所有电子邮件都将使用该自定义Mailer