有没有一种方法可以在电子邮件模板中添加foreach循环?


10

我试图在客户下订单后向客户发送邮件。该电子邮件将包含所订购产品的所有交叉销售产品。

我使用以下链接作为参考:

使用事件观察器发送电子邮件

高级交易电子邮件模板

一切都很好。

但是现在我的疑问是,我能否在locale目录中放置的html文件中使用foreach循环?

这样我就可以迭代并在邮件模板中打印所有产品信息。有人可以帮忙吗?

Answers:


21

我认为不可能直接在电子邮件中执行foreach循环,但是您可以做的是在常规模板中包含一个将执行循环的块。

在您的电子邮件中添加以下内容。

{{block type='core/template' area='frontend' template='email/template.phtml' items=$items}}

然后在您的模板中添加以下内容。

<?php foreach ($this->getItems() as $_item): ?>
    <p><?php echo $_item['name'] ?></p>
<?php endforeach; ?>

有关更多信息,我关注了此博客


是的,我实际上正在尝试此操作。将在2分钟内接受
Shathish 2013年

我们是否必须在电子邮件模板中添加此阻止?会明白items=$items吗?由于$items是php变量。
Akshay Taru 2015年

嗨,我在上面尝试过,不为我工作。有什么建议
阿克沙伊多留

0

实际上,您可以在电子邮件中使用for循环。我已经在2.3.3版本上测试过。这是要检查的代码位置。这是模板中的样子:

<ul>
  {{for item in data.items}}
     <li>Name: {{var item.name}}</li>
  {{/for}}
</ul>

运输信息:

$this->transportBuilder->setTemplateVars(
[
 'items' => [
              ['name' => 'Product1'],
              ['name' => 'Product2']
            ]
...

在旁边。在2.3.4中,代码被重构了,但是我相信它仍然应该工作,因为它没有被删除。请记住,从此版本开始,Magento删除了在对象上调用函数的功能,因此您的order->getItems()函数可能无法正常工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.