有问题扩展app \ code \ core \ Mage \ Sales \ Model \ Order \ Invoice.php类

时间:2014-03-26 21:21:39

标签: php magento model override extend

在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 = '')
    {

我已禁用原始类中的原始函数,当我尝试发送电子邮件时,它会给我一个错误。

我做错了什么?

1 个答案:

答案 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,所以我认为值得重新阅读该文章。