2011-04-04 60 views
1

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

$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> 

任何想法?

顺便说一下,我怎样才能构建网址到我的产品? (让客户点击一个链接查看产品)

+1

拍手并开始调试,如果在应用实际过滤器时您的变量已到位。最好使用的是http://www.xdebug.org/,并与您的php ide一起使用,您可以开始调试会话 – 2011-04-04 11:43:09

回答

4

试试没有美元符号的变量。看看默认的电子邮件模板,它们看起来并不包含这些美元符号。

希望有帮助!

谢谢, 乔

+0

谢谢,但我尝试了两种方法,都没有成功。 – JohnT 2011-04-04 18:51:04

2

这些参数而.之前的部分被认为是对象和字符串之后被调用该对象上的method是记号化。

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

但是对于不同的模板方法应该如何传递参数有一个重要的区别。正如我可以从源代码收集的那样,所有将参数作为单个参数而不指定属性的模板方法应该在不带前导码$的情况下调用,而使用属性的所有方法都需要$作为前缀。

属性分配

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

但作为一个单一的PARAM

{{var customer.getName()}} 

查找类Mage_Core_Model_Email_Template_Filter所有可用的方法通过查看*Directive()功能。