我想发送一封包含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);
...
...
有人可以帮助我吗?
提前谢谢
答案 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
必须是ArrayList
或DataList
才能在模板中使用<% 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>