在app \ code \ core \ Mage \ Sales \ Model \ Order \ Invoice.php的Invoice.php类中有一个sendEmail函数我想改变因此我认为我应该扩展类并进行更改本地模块。
我开始在服务器上创建名为
的目录/的public_html /应用程序/代码/本地/ Mymodule中
然后我添加了config.xml,如下所示: -
/ public_html / app / code / local / Mymodule / Sales / etc,其中包含以下config.xml
<?xml version="1.0"?>
<config>
<modules>
<Mymodule_Sales>
<version>0.1</version>
</Mymodule_Sales>
</modules>
<global>
<models>
<sales>
<rewrite>
<order_invoice>Mymodule_Sales_Model_Order_Invoice</order_invoice>
</rewrite>
</sales>
</models>
</global>
</config>
然后我创建了另一个文件夹,如下所示
/的public_html /应用程序/代码/本地/ Mymodule中/销售/型号
包含Invoice.php
<?php
class Mymodule_Sales_Model_Order_Invoice extends Mage_Sales_Model_Order_Invoice
{
/**
* Send email with invoice data
*
* @param boolean $notifyCustomer
* @param string $comment
* @return Mage_Sales_Model_Order_Invoice
*/
public function sendEmail($notifyCustomer = true, $comment = '')
{
我已禁用原始类中的原始函数,当我尝试发送电子邮件时,它会给我一个错误。
我做错了什么?
答案 0 :(得分:0)
请具体告诉我们您收到的错误消息,但乍一看您需要将文件Invoice.php放入文件夹/ Order中,以便完整路径:
/public_html/app/code/local/Mymodule/Sales/Model/Order/Invoice.php
对于你的情况,模块也在重写这个函数(下面的评论),你需要注意Magento加载config.xml的顺序。两个模块不能重写相同的功能,但您可以构建一个继承链。因此Oeditor_Ordereditor_Model_Order_Invoice
可以延长Mage_Sales_Model_Order_Invoice
,然后您的Mymodule_Sales_Model_Order_Invoice
可以延长Oeditor_Ordereditor_Model_Order_Invoice
。然后为了确保Magento以正确的顺序加载这些依赖项,您需要将xml放入模块配置app / etc / modules / Mymodule_Sales.xml中的是<depends>
节点:
<config>
<modules>
<Mymodule_Sales>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Sales />
<Oeditor_Ordereditor />
</depends>
</Mymodule_Sales>
</modules>
</config>
请参阅第二个答案here以供参考。
管理继承时要小心。您可以使用parent ::将控制权传递给Oeditor_Ordereditor和the genius of Alan Storm has a comprehensive article on using parent:: in rewrites,所以我认为值得重新阅读该文章。