djd*_*jdy 15 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
.我会在哪里这样做?
小智 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
Run Code Online (Sandbox Code Playgroud)
因此,该支付块的信息必须在那里.我接受Mage_Sales_Model_Order
并检查了变量$paymentBlockHtml
.这指向通过支付信息填充支付块的进一步逻辑.它正在创建一个块,看起来第一次看起来不容易扩展/更改/修改.是的,我们可以将模板应用于特定(付款)块类型,因为已创建块,但我们无法轻松检查要加载的块.此外,模板在构造中被否决了Mage_Payment_Block_Info
让我们检查另一种方式.
让我们做一些很酷的事情,为什么我们不向包含正确信息的电子邮件添加块,但更重要的是可以切换到正确的情况.由于模板解析器用于解析变量和布局句柄,我们可以添加以下内容而不是{{var payment_html}}
块,并在块本身中检索该信息.
{{block type='core/template' template='email/templatename.phtml'}}
Run Code Online (Sandbox Code Playgroud)
上面的代码将email/templatename.phtml解析为电子邮件,这意味着您可以在该模板中执行任何操作以显示正确的数据.在我们可以在此模板中检索付款数据之前,我们必须使用订单数据添加订单参数.这很简单;
{{block type='core/template' order=$order template='email/templatename.phtml'}}
Run Code Online (Sandbox Code Playgroud)
在模板中,我们可以$this->getOrder()->getPayment()
检索付款信息,或$this->getOrder->getPayment()->toHtml()
以其他方式处理数据.
奖金; 另一种解决方案是使用布局句柄并在layout.xml中设置正确的模板和类型,下面是同一电子邮件中订单项的示例.它的工作方式与块相同,但仅适用于布局xml中的一些设置.
{{layout handle="sales_email_order_items" order=$order}}
Run Code Online (Sandbox Code Playgroud)
在 /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
)
);
Run Code Online (Sandbox Code Playgroud)
您可以看到这是设置“ payment_html”数据的地方。只需将其换成您想要的即可。