Answers:
在这种情况下,您可以通过处理程序进行管理。
create a handler
并使用此处理程序呈现了一个phtml文件。local.xml
在app/design/frontend/YOUR_PAackage/YOUR_template/layout
定义处理程序上打开。
布局文件代码如下:
<?xml version="1.0"?>
<layout version="0.1.0">
<!-- add new handler -->
<amit_customer_addhan>
<block type="core/template" name="addNewLi" template="sales/showcheckmo.phtml" />
</amit_customer_addhan>
</layout>
然后 on email html call this handler(locale/YourLANG/template/email/)
{{layout handle="amit_customer_addhan" order=$order}}
phtml文件代码:
然后phtml file
放在像show extra li
<?php if($this->getOrder()->getPayment()->getMethodInstance()->getCode()=='checkmo'):?>
<li>payment check</li>
<?php endif;?>
编辑:的位置phtml file
是:
app/design/frontend/YOUR_PAackage/YOUR_template/template/sales/
调用没有布局处理程序和ans参数的块文件
{{block type='core/template' area='frontend' template='sales/showcheckmo.phtml' order=$order}}
在这种情况下,需要设置 mangento area
为frontend
从此处调用的phtml文件
我会尝试回答您的第一个问题-如何在条件中使用指令。对于调试,我使用xDebug。我认为调试电子邮件非常困难。在这种情况下,我向您展示了magento另一部分中具有相同结构的示例。
在销售/订单/视图上具有相同的结构。在Mage/Core/etc/config.xml
中确定的地址输出结构default/customer/address_templates/text
。
我们的任务将添加任何条件以显示或不显示“公司名称”。指令,如VAR,依赖,如果解析中Varien_Filter_Template
在方法滤波器($值)。在此方法中,所有$ constructions(if / depend / var)以及此调用中使用的每个$ construction都有一个迭代:
$replacedValue = call_user_func($callback, $construction);
对于每个if / depende / var,都有其自己的方法。让我们来看看public function ifDirective($construction)
public function ifDirective($construction)
{
if (count($this->_templateVars) == 0) {
return $construction[0];
}
if($this->_getVariable($construction[1], '') == '') {
if (isset($construction[3]) && isset($construction[4])) {
return $construction[4];
}
return '';
} else {
return $construction[2];
}
}
现在让我们看一下受保护的方法_getVariable。我想在一行上引起您的注意:
} elseif (isset($stackVars[$i-1]['variable']) && $stackVars[$i-1]['variable'] instanceof Varien_Object) {
并查看以下评论:
// If object calling methods or getting properties
因此,为了使条件成立,我们的$ stackVars应该是一个对象,并且应该是Varien_Object的实例(大多数模型是从Mage_Core_Model_Abstract扩展而来的,该模型是从Varien_Object扩展而来的)。让我们爬上几步。我们需要添加到stackVars和object。
在类Mage_Customer_Block_Address_Renderer_Default的示例中,magento调用了上面提到的方法filter($ value)。
public function render(Mage_Customer_Model_Address_Abstract $address, $format=null)
{
//parsing $data array
$formater->setVariables($data);
$format = !is_null($format) ? $format : $this->getFormat($address);
return $formater->filter($format);
}
在这种方法中,我们将订单对象添加到$ data数组中。根据我的任务,将订单对象添加到此数组。在'$ formater-> setVariables($ data);'之前执行此操作
$data['order_object'] = $address->getOrder();
此magento之后,将解析该对象并调用其任何方法。例如,我们添加了新方法getPaymentOutput()。将简单的功能放入Order类:
public function isPrinted()
{
if ($this->getPayment()->getMethod() == 'checkmo') {
return true;
} else {
return false;
}
}
并且只有在此之后,我们才能使用以下命令在xml指令中进行更改:
{{if order_object.isPrinted()}}{{var smth}}<br />{{/if}}