Silverstripe 3 - 发送包含foreach-loop数据的电子邮件

时间:2014-03-15 17:15:18

标签: email foreach silverstripe

我想发送一封包含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);
...
...

有人可以帮助我吗?

提前谢谢

1 个答案:

答案 0 :(得分:2)

使用内置的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才能在模板中使用<% loop %>。如果$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>