将自定义变量/参数从电子邮件模板传递到phtml文件

时间:2013-12-26 13:55:23

标签: magento email-templates

我被我的自定义代码卡住了。

我想将自定义变量从电子邮件模板传递到pthml文件。

编辑文件

  

应用程序/代码/本地/法师/销售/型号/ Order.php

在这个函数中:

public function sendNewOrderEmail()
  {

--- default code start ----
$mailer->setTemplateParams(array(
                'order'        => $this,
                'test'        => 'XXXXX',
                'billing'      => $this->getBillingAddress(),
                'payment_html' => $paymentBlockHtml
            )
        );
--- default code end ----
}

然后我将此代码放入新订单电子邮件模板中:

{{layout handle="sales_email_order_items" order=$order  test=$test}}

模板文件位于此处:

  

应用程序/区域/ EN_US /模板/电子邮件/销售/ order_new.html

我想在这里获得测试变量:

  

应用程序/设计/前端/默认/默认/模板/电子邮件/顺序/物品/订单/ default.phtml

像这样:$test = $this->getItem()->getTest()

但没有成功。请让我知道我哪里错了?或者做什么需要在phtml文件中访问这个变量?

2 个答案:

答案 0 :(得分:2)

在电子邮件模板中获取变量

  

{{var test}}

看看@ Defining Transactional Variables

答案 1 :(得分:2)

这里的问题是'测试'值转到主块Mage_Sales_Block_Order_Email_Items,它使用" email / order / items.phtml" tempalte。

在那里你可以使用:

找到数据
<?php $test = $this->getTest(); // or $this->getData('test') ?>

然后,您可以将此数据添加到注册表中。

但更好的方法是在电子邮件之前将此信息发送到订单商品。 所以,在$ mailer-&gt; setTemplateParams()之前的电子邮件功能中;添加如下代码:

//$this = current order if you are in Mage_Sales_Model_Order
foreach ($this->getAllVisibleItems() as $item) {
    $item->setData('test', 'test_value_10');
}