如果付款方式是,则在交易电子邮件中显示行


8

我只想在客户选择付款方式结帐汇票时显示一行。当客户选择汇票作为付款方式时,我想<li>在交易电子邮件中显示一行。

如果客户选择其他付款方式,<li>则应隐藏其他付款方式。

我尝试了这段代码,但这不起作用:

{{depend order.getPayment().getMethod() == "checkmo"}}
    <li>payment check</li>
{{/depend}}

我该如何实现?

Answers:


7

在这种情况下,您可以通过处理程序进行管理。

使用处理程序:

创建处理程序并在布局文件中定义它:

create a handler并使用此处理程序呈现了一个phtml文件。local.xmlapp/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 areafrontend从此处调用的phtml文件


嗨,阿米特(Amit),在哪里可以找到文件showcheckmo.phtml或在哪里创建它?
JGeer 2015年

更新,请检查
阿米特贝拉

试过了,但这不起作用。该行未显示在电子邮件中。
JGeer 2015年

尝试在phtml上放置一些静态内容。和CKD文本是否到来
阿米特·贝拉

不能,静态内容也不起作用。我究竟做错了什么?
JGeer 2015年

0
order.getPayment().getMethodInstance().getCode() == 'banktransfer'

尝试过,但那也
没用

0

我会尝试回答您的第一个问题-如何在条件中使用指令。对于调试,我使用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)。


在这里,我提供了一个解决方案。警告!这个解决方案不是很干净。目的是显示magento行为。请全部重写自己。

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}}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.