编辑Magento销售电子邮件支付块

时间:2011-07-29 15:54:56

标签: email templates magento

app\locale\en_US\template\email\sales\order_new.html是有问题的文件。

如何在不影响网站其他部分的情况下编辑{{var payment_html}}?

该部分似乎来自:app\design\frontend\base\default\template\payment\info\default.phtml

我对此是否正确?但该文件用于网站上的其他位置。这也是正确的吗?

我想创建一个单独的文件,比如default_email.phtml,单独设置样式,然后让order_new.phtml包含新文件。

我认为我需要在default_email.phtml中加入layout\***.xml个文件。我会在哪里做到这一点?

3 个答案:

答案 0 :(得分:6)

我做的第一件事就是搜索Magento的源代码。假设我在{{var payment_html}}搜索的某处处理了payment_html。 几个结果与搜索匹配;

Mage_Sales_Model_Order
Mage_Sales_Model_Order_Creditmemo
Mage_Sales_Model_Order_Invoice
Mage_Sales_Model_Order_Shipment

因此该支付区的信息必须在那里。我拿了Mage_Sales_Model_Order并检查了变量$paymentBlockHtml。这指向通过支付信息填充支付块的进一步逻辑。它正在创建一个块,看起来第一次看起来不容易扩展/更改/修改。 是的,我们可以将模板应用于特定(付款)块类型,因为已创建块,但我们无法轻松检查要加载的块。此外,模板在Mage_Payment_Block_Info

的结构中被否决

让我们检查另一种方式。

让我们做一些很酷的事情,为什么我们不向包含正确信息的电子邮件添加块,但更重要的是可以切换到正确的情况。由于模板解析器用于解析变量和布局句柄,我们可以添加以下内容而不是{{var payment_html}}块,并在块本身中检索该信息。

{{block type='core/template' template='email/templatename.phtml'}}

上面的代码将电子邮件/ templatename.phtml解析为电子邮件,这意味着您可以在该模板中执行任何操作以显示正确的数据。 在我们可以在此模板中检索付款数据之前,我们必须使用订单数据添加订单参数。这很简单;

{{block type='core/template' order=$order template='email/templatename.phtml'}}

在模板中,我们可以$this->getOrder()->getPayment()检索付款信息,或$this->getOrder->getPayment()->toHtml()或以其他方式处理数据。

奖金; 另一种解决方案是使用布局句柄并在layout.xml中设置正确的模板和类型,下面是同一电子邮件中订单项的示例。它的工作方式与块相同,但仅适用于布局xml中的一些设置。

{{layout handle="sales_email_order_items" order=$order}}

答案 1 :(得分:0)

在/app/code/core/Mage/Sales/Model/Order.php中有一个名为“sendNewOrderEmail”的方法。这是你需要影响的。您将找到与以下内容类似的代码:

$mailTemplate->setDesignConfig(array('area'=>'frontend', 'store'=>$this->getStoreId()))
                ->sendTransactional(
                    $template,
                    Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $this->getStoreId()),
                    $recipient['email'],
                    $recipient['name'],
                    array(
                        'order'         => $this,
                        'billing'       => $this->getBillingAddress(),
                        'payment_html'  => $paymentBlock->toHtml(),  //Just change this line
                    )
                );

您可以看到这是“payment_html”数据设置的位置。只需将其换成你想要的那样。

答案 2 :(得分:0)

我有同样的问题。我所做的只是更改电子邮件是将以下内容添加到付款信息类。

protected function _construct() {
     parent::_construct();
     $this->setTemplate('payment/info/{new template}.phtml');
}

然后创建模板,如果使用此付款方式,电子邮件会将此模板插入付款部分。

希望这有用!