Magento - 覆盖订单控制器


Magento - Override order controller

我想覆盖以下在后端创建订单的控制器:

app/code/core/Mage/Adminhtml/controllers/Sales/Order/CreateController.php

我已将文件本身复制到:

app/code/community/Pinto/PartnerSystem/Adminhtml/controllers/Sales/Order/CreateController.php

为了不确定将文件/目录结构复制到何处或如何准确复制,我还将其复制到:

app/code/community/Pinto/PartnerSystem/controllers/AdminControllers/Sales/Order/CreateController.php

然后,我将类重命名为:

class PartnerSystem_Adminhtml_Sales_Order_CreateController extends Mage_Adminhtml_Sales_Order_CreateController 
{ 
// functions 
}

在我的配置中.xml我添加了以下内容:

<admin>
        <routers>
            <partnersystem>
                <use>admin</use>
                <args>
                    <module>Pinto_PartnerSystem_AdminControllers</module>
                    <frontName>partnersystemadmin</frontName>
                </args>
            </partnersystem>
            <adminhtml>
                <args>
                    <modules>
                        <partnersystem before="Mage_Adminhtml">PartnerSystem_Adminhtml_Sales_Order_CreateController</partnersystem>
                    </modules>
                </args>
            </adminhtml>
        </routers>  
    </admin>

不太确定我应该在两者之间放什么才能让它使用我的CreateController.php而不是基本的。

对Magento来说很新,所以可以使用一些帮助:)

新控制器的正确路径是: app/code/community/Pinto/PartnerSystem/controllers/Adminhtml/Sales/Order/CreateController.phpcontrollersAdminhtml切换文件夹)。配置中的这一行:

<partnersystem before="Mage_Adminhtml">PartnerSystem_Adminhtml_Sales_Order_CreateController</partnersystem>

应该是

<partnersystem before="Mage_Adminhtml">Pinto_PartnerSystem_Adminhtml</partnersystem>

并在新的控制器文件中,在类定义之前添加此

require_once 'Mage/Adminhtml/controllers/Sales/Order/CreateController.php'  

[编辑]
新的控制器类名应Pinto_PartnerSystem_Adminhtml_Sales_Order_CreateController

这是控制器包含路径上的一个小通知。

如果打开了Magento编译器模式,则此包含路径可能会导致错误

require_once 'Mage/Adminhtml/controllers/Sales/Order/CreateController.php';

取而代之的是,最好使用

require_once Mage::getModuleDir('controllers', 'Mage_Adminhtml').DS.'Sales_Order_CreateController.php';

它会更安全。希望这有帮助..