如何在magento中覆盖OrderController

时间:2013-07-18 10:05:24

标签: magento controller magento-1.7 sales

我想覆盖Mage/Adminhtml/controllers/Sales/OrderController.php。我的模块是app/code/local/MW/Adminhtml

在我的conig.xml中,我输入了以下代码。

<config>
.....
<admin>
        <routers>
            <adminhtml>                
                <args>
                    <modules>
                        <MW_Adminhtml before="Mage_Adminhtml">MW_Adminhtml</MW_Adminhtml>
                    </modules>                    
                </args>
            </adminhtml>
        </routers>
    </admin>
</config>

控制器如下。

require_once 'Mage/Adminhtml/controllers/Sales/OrderController.php';
class MW_Adminhtml_Sales_OrderController extends Mage_Adminhtml_Sales_OrderController
{
    /*
     some code

*/
}

但它仍然加载核心控制器类。我在这做错了什么?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

这是来自magento 1.7

的工作示例

在你的app / code / local / Namespace / ModuleName / etc / config.xml

<?xml version="1.0"?>
<config>

  <frontend>
  </frontend>

  <adminhtml>
  </adminhtml>

  <admin>
      <routers>
            <adminhtml>     
            <use>admin</use>           
                <args>
                    <modules>
                        <Namespace_ModuleName before="Mage_Adminhtml">Namespace_ModuleName</Namespace_ModuleName>
                    </modules>                    
                </args>
            </adminhtml>
      </routers>
  </admin>
</config>

和控制器类:

应用程序/代码/本地/命名空间/模块名/控制器/销售/ OrderController.php

require_once 'Mage/Adminhtml/controllers/Sales/OrderController.php';
class Namespace_ModuleName_Sales_OrderController extends Mage_Adminhtml_Sales_OrderController
{
    protected function _construct()
    {
        die('it works');
    }
}

可能使用:<use>admin</use>是这种情况下的关键。

答案 1 :(得分:0)

我知道我已经晚了3年,但我只花了一个小时才这一次,所以我的经验可能在将来帮助其他人。

如果您使用的是magento企业版,则必须添加:

before="Enterprise_SalesArchive_Adminhtml"

而不是

before="Mage_Adminhtml"

在config.xml文件中的控制器路由器声明中,然后下面的确切代码就像魅力一样。