【问题标题】:Silverstripe 3 - send email with data of foreach-loopSilverstripe 3 - 发送带有 foreach-loop 数据的电子邮件
【发布时间】:2014-03-15 17:15:18
【问题描述】:

我想发送一封包含 foreach 循环数据的电子邮件,但我不知道如何将数据放入电子邮件正文。

这是我当前的代码

...
...

    foreach($cartItems as $cartItem) {
        '<strong>' . $cartItem->Amount . 'x ' . $cartItem->Title . '</strong>' . '<span>' . $cartItem->Price . ' €/St. insgesamt ' . $cartItem->Sum . '</span><br>';
    }
...
...
    $messageBody = " 
         foreach() Content should be here
    "; 
    $email->setBody($messageBody);
...
...

有人可以帮我吗?

提前谢谢你

【问题讨论】:

    标签: email foreach silverstripe


    【解决方案1】:

    使用内置的Silverstripe Email 功能利用 Silverstripe 的电子邮件模板。

    使用 Silverstripe,您可以为您的电子邮件创建模板并使用您喜欢的任何数据填充它。

    在控制器的发送功能中,您可以使用setTemplate 设置模板,并使用populateTemplate 将数据推送到电子邮件模板中:

    $email = new Email($from, $to, $subject);
    
    $email->setTemplate('EmailTemplate');
    
    $email->populateTemplate(array(
        'CartItems' => $cartItems,
        'PageTitle' => $this->Title
    ));
    
    $email->send();
    

    注意$cartItems 必须是ArrayListDataList 才能在模板中使用&lt;% loop %&gt;。如果$cartItems 是一个数组,请阅读如何将其转换为ArrayList here

    将您的模板放入themes/mytheme/templates/Email/EmailTemplate.ss

    EmailTemplate.ss

    <!DOCTYPE HTML>
    <html>
    <head>
        ...
    </head>
    
    <body>
        ...
        <% if $CartItems %>
        <% loop $CartItems %>
        ...
        <% end_loop %>
        <% end_if %>
        ...
    </body>
    </html>
    

    【讨论】:

    • 感谢@Zauberfisch 的编辑。我添加了你的 cmets。很抱歉社区没有批准它。我很欣赏这种改进。
    • 太好了。谢谢你们!
    猜你喜欢
    • 1970-01-01
    • 2011-08-30
    • 2017-07-21
    • 1970-01-01
    • 2021-10-06
    • 2015-09-09
    相关资源
    最近更新 更多