电子邮件模板变量如何在Magento中运行?

时间:2011-04-04 08:53:09

标签: php email templates magento

我需要创建一个使用从cron运行的观察者发送的特定电子邮件模板 当我收到电子邮件时,我没有提供变量的值。

$vars = array(
    'product'  => $product,
    'customer' => $customer
);

$mailTemplate->sendTransactional(
    $mailId,
    'general',
    $customer->getData('email'),
    $customer->getData('firstname') . ' ' . $customer->getData('lastname'),
    $vars
);

$product& $customer都是模型集合中的对象(Product_Collection& Customer_Collection)。

在我的模板中,我试图像这样访问它们:

Dear {{htmlescape var=$customer.name}},
<p>Check {{htmlescape var=$product.name}}</p>

有什么想法吗?

顺便说一下,我如何为我的产品构建网址? (让客户点击链接查看产品)

2 个答案:

答案 0 :(得分:4)

尝试不使用变量上的美元符号。查看默认电子邮件模板,它们似乎不包含这些美元符号。

希望有所帮助!

谢谢, 乔

答案 1 :(得分:2)

这些参数是标记化的,而.之前的部分被认为是对象,而后面的字符串是要在该对象上调用的method

因此,在模板处理期间,$customer.name会被评估为$customer->name()。要检索客户的名称,您可以在PHP中调用$customer->getName(),因此在模板中使用$customer.getName()

对于不同的模板方法,如何传递参数存在重要差异。正如我可以从源代码中收集的那样,所有使用参数作为单个参数而没有属性赋值的模板方法应该在没有前导$的情况下调用,而所有使用属性的方法都需要$作为前缀。

属性分配

{{htmlescape var=$customer.getName()}}

但作为一个单一的参数

{{var customer.getName()}}

通过查看Mage_Core_Model_Email_Template_Filter函数,查找班级*Directive()中的所有可用方法。