【问题标题】:Creating dynamic e-mail template创建动态电子邮件模板
【发布时间】:2017-05-11 08:26:43
【问题描述】:

我正在寻找一种方法来创建一个好的系统来将数据推送到电子邮件模板中。

我有一个包含数据的数组(数据的数量取决于电子邮件中的区域数量)和一个简单的 html 邮件模板:

数据:

$mailDatas = array("mail title", "mail body", "mail footer");

还有一个模板应该是什么样子的非常简单的例子:

<div id="mail-container">
    <div id="mail-header">{data}</div>

    <img id="some design elements">


    <div id="mail-body">{data}</div>

    <div id="mail-footer">{data}</div>
</div>

我需要的是用我的数组$mailDatas[0] 的第一个数据替换第一个{data}(它是一个字符串),用$mailDatas[1] 替换第二个{data},[...]

最好的方法是什么?我正在构建一个使用模板生成邮件正文的函数。

【问题讨论】:

    标签: php email templates cakephp


    【解决方案1】:

    您可以使用 CakePHP 内置的电子邮件库。您可以声明模板、声明视图并将变量传递给它。

    比如你可以把你的模板放在src/Template/Layout/Email/html/default.ctp,你的视图放在src/Template/Email/html/welcome.ctp,然后调用:

    $email = new Email();
    $email
        ->emailFormat('Html')
        ->template('welcome','default')
        ->to('johnny@example.com')
        ->viewVars($arrayOfVariables);
    $email->send();
    

    视图变量的工作方式与“正常”视图中的完全一样,所以如果你声明你的数组:

    $arrayOfVariables = ['varOne' => 'some text', 'varTwo' => 'other text'];
    

    你可以像这样在视图中使用它:

    <span><?= $varOne ?></span>
    

    更多信息,请阅读文档:https://book.cakephp.org/3.0/en/core-libraries/email.html

    【讨论】:

    • 就是这个想法,但我不想为我的变量使用键,只有多个 {data}。但我找到了 preg_replace_callback 的解决方案 :)
    • @ThomasRbt 根据外部输入的顺序,这听起来像是一个非常容易出错的解决方案。
    【解决方案2】:

    您需要运行一个 foreach 并在其中使用 maildatas 变量创建 HTML

    类似的东西

    foreach ($maildatas as $maildata) { ?>
       <div id="mail-body"><?= $maildata; ?></div>
    <?php } ?>
    

    【讨论】:

    • 不,我希望用我的数据数组中的一行替换每个 {data}
    • 在查询后,循环将在从数据库返回的数组上运行.. HTML 创建逻辑不会改变..只是数组现在将具有来自数据库的动态内容
    猜你喜欢
    • 2022-01-20
    • 2011-02-18
    • 2014-04-18
    • 1970-01-01
    • 2016-08-03
    • 2020-05-08
    • 1970-01-01
    • 2013-10-26
    • 2017-09-22
    相关资源
    最近更新 更多