Magento电子邮件模板如果语句在我期望的时候没有评估为真。有人能告诉我什么是错的吗?看看下面的代码:
{{var customer.group_id}}
{{if customer.group_id}}Print true{{else}}Print false{{/if}}
{{if customer.group_id==4}}Print true{{else}}Print false{{/if}}
{{if customer.group_id=4}}Print true{{else}}Print false{{/if}}
{{if customer.group_id eq 4}}Print true{{else}}Print false{{/if}}
输出
4
Print True
Print False
Print False
Print False
我尝试在4周围加上引号,但结果相同。如何使用magento电子邮件模板判断if语句的等同性?
答案 0 :(得分:32)
我使用'block'技术解决了这个问题。
您所做的就是将订单传递给某个区块,然后在该区块内执行您的逻辑。
虽然我的解决方案是针对不同的问题,但这种方法应该适用于此。
我想要的是通过支票付款选项和确认电子邮件中的一些额外文字提醒他们付款。我将此添加到新订单模板中:
{{block type='core/template' area='frontend' template='paymentstatus/orderemail.phtml' order=$order}}<br />
然后我创建了一个文件app/design/frontend/default/default/template/paymentstatus/orderemail.phtml
这有'if'逻辑,在我的情况下,我想查看订单状态是否为支票,然后提醒客户他们的订单需要清算资金。
<?php if($this->getData('order')->getStatus()=='cheque') {
echo "<p>Please note that we will require your cheque to clear before we can despatch your order.</p>"; }?>
答案 1 :(得分:16)
通过代码挖掘,看起来模板逻辑由Varien_Filter_Template
(在lib {Varien而不是app \ code下)的filter
函数实现,该函数向{{1}发出回调函数,如果模式匹配正则表达式。 ifDirective
依次使用ifDirective
函数来评估您的_getVariable
条件。 if
然后将_getVariable
中的条件标记为属性或方法。
Varien_Filter_Template_Tokenizer_Variable
当检测到if条件是一个方法时,它将执行该方法,否则它只返回变量的字符串值。
所有这些意味着(我认为!)如果你想评估if语句中的表达式,你需要添加一个新的客户属性(有可用的扩展),模板可以评估。因此,如果您定义一个布尔“isMemberOfGroupNameX”属性,那么该模板应该可以工作。
我想这不是你正在寻找的答案,但我很确定是这样的。
HTH, JD
答案 2 :(得分:7)
我可以使用{{depend}}模板标记在模板中或多或少地完成此任务。
{{depend somevar}}
Print this if somevar evaluates to true
{{/depend}}
你必须在app / code / local / Mage / Sales / Model / Order.php中使用sendNewOrderEmail()之类的方法来构建这个变量。
答案 3 :(得分:0)
在正常的Magento块/类中,您可以使用$customer->getGroupId()
来访问组ID值。相似的CMS /电子邮件模板为customer.getGroupId()
,而不是您编写的customer.group_id
。