【问题标题】:Magento variable to display payment method in email subjectMagento 变量以在电子邮件主题中显示付款方式
【发布时间】:2012-12-19 10:13:09
【问题描述】:

我正在尝试在 Magento 中的新订单电子邮件的电子邮件主题中显示付款方式。原因是我们的客户可以轻松地从 Magento 发送的电子邮件主题中确定订单是通过支付网关还是通过 Paypal Express 发送的。

我不完全确定实现这一目标的最佳方法,我想已经有一些可用的东西可以用于此目的。

{{var payment_html}}

返回电子邮件模板的付款方式块...

{{var paymentMethod}}

在电子邮件主题中绝对不返回任何内容,因此现在不确定这是否是折旧变量。

我想还有创建自定义属性的选项,在静态块中调用它,然后在电子邮件模板中将其显示为自定义变量,但这似乎是一种相当冗长的方法,只是纯粹获取文本字符串“通过 SagePay”或“通过 Paypal Express”。

任何帮助将不胜感激。

提前致谢。

【问题讨论】:

    标签: magento magento-1.7


    【解决方案1】:

    您实际上不需要执行任何自定义,此变量已通过对象链在模板中可用。 Magento 模板支持此链,并允许使用对象的 getter。

    在这种情况下,您需要检索订单的支付对象,然后检索其方法实例并从方法实例中检索方法标题。这是非常简单的构造:

    {{var order.getPayment().getMethodInstance().getTitle()}}
    

    这应该对你有帮助!

    【讨论】:

    • 哇,很酷的功能,但它不是业务逻辑混乱吗?
    • @PavelNovitsky 如果您对这种方法调用感到困惑,您可以使用更简单的方法:{{var order.payment.method_instance.title}}。它也会这样做。但这并不是一团糟,因为这是添加到电子邮件模板引擎的特殊功能,因此开发人员不需要指定所有可能的变量,您只需指定一个具有所有必需数据的对象即可。
    • 所以,'billing' => $this->getBillingAddress() 对你的方法也没用:)
    • @PavelNovitsky 是的,即使在核心电子邮件模板中也没有使用此变量,例如:{{var order.getBillingAddress().format('html')}}。它只是一个历史向后兼容的变量:)
    • 完美的伊万。这正是我所追求的——谢谢一百万! :)
    【解决方案2】:

    方法 Mage_Sales_Model_Order::sendNewOrderEmail() 负责发送新的订单电子邮件。

    $paymentBlock = Mage::helper('payment')->getInfoBlock($this->getPayment())
        ->setIsSecureMode(true);
    $paymentBlock->getMethod()->setStore($storeId);
    $paymentBlockHtml = $paymentBlock->toHtml();
    

    ...

    $mailer->setTemplateParams(array(
        'order'        => $this,
        'billing'      => $this->getBillingAddress(),
        'payment_html' => $paymentBlockHtml
    )
    

    payment_html是块的html输出,所以不能使用。

    您可以使用付款方式再添加一个关联键(使用重写或本地/法师技巧),并使用交易电子邮件将此参数添加到主题。

    【讨论】:

    • 我想在付款说明中附加超链接,以便在电子邮件中显示。你知道有什么办法吗?
    猜你喜欢
    • 1970-01-01
    • 2018-10-29
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多