【问题标题】:SilverStripe default email styleSilverStripe 默认电子邮件样式
【发布时间】:2014-05-07 21:44:46
【问题描述】:

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

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

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

查看框架源代码,创建一个自定义 Email 类并覆盖 parseVariables() 可能会实现它,但这似乎有点矫枉过正?

【问题讨论】:

    标签: silverstripe


    【解决方案1】:

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

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

    希望对你有帮助

    【讨论】:

    • 看起来只要正在发送的电子邮件还没有模板,它就可以工作。看起来Mailer->sendHTML() 检查模板是否有一个打开的<body> 标签,如果没有,则插入一个通用包装器,忽略GenericEmail.ss
    • 我猜你可以构建一个自定义的Mailer 并覆盖sendHTML() 并首先修改$htmlContent
    • 用于缺少 body 标签的包装器负责重用 $htmlContent 作为 body 标签的 innerhtml,因此它会尊重预呈现的电子邮件(在 Email@parseVariables() 中)。如果这是一个问题,在 GenericEmail.ss 中有一个 body 标签会绕过包装器
    • 但是对于像ChangePasswordEmail 这样的东西,它有一个默认模板,并且默认没有<body>,跳过使用GenericEmail.ss,因为它有自己的。那时Mailer::sendHTML() 将其拾取并插入硬编码的 html/body 设置。
    • 我现在更了解您的问题了。您想为所有电子邮件使用自定义包装器,但继续使用开箱即用的模板;我没有从最初的请求中得到这一点。在这种情况下,是的,在您的第二条评论中子类化 Mailer 可能是最好的方法。然后您可以在 mysite/_config.php 中使用 Mailer::set_mailer() 以便所有发送的电子邮件都使用该自定义邮件程序
    猜你喜欢
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 2012-03-04
    • 2021-08-09
    • 2012-12-10
    • 1970-01-01
    相关资源
    最近更新 更多