如何覆盖Magento Core模块?

问题描述:

我想修改在管理界面和PDF生成代码订单/销售表的代码,而无需在core目录alterting的文件。我该怎么做呢?我明白,我要创建一个使用我想覆盖文件相同的路径一个新的模块,但我不知道还有什么我必须做的......有没有一些特殊的措施来补办的​​3210模块??如何覆盖Magento Core模块?

如果你想这样做在一个单独的模块,你应该把你的新模式(块,辅助性或者任何你需要重写 - 我将要使用的模型为例,其同为别人 - 只有控制器是完全不同的)在'Model'目录中(例如:code/local/MyNamespace/MyModule/Model/Sales/Order.php)。在你的模块config.xml中你应该增加:

<global> 
(...) 
    <models> 
    (...) 
    <sales> 
     <rewrite> 
     <order>MyNamespace_MyModule_Model_Sales_Order</order> 
     </rewrite> 
    </sales> 
    </models> 
(...) 
</global> 

当然你自己sales_order的模型应该从核心一个继承。这是覆盖Magento核心功能的最干净的方式(可能除了事件,但他们不能做所有事情)。

创建要在模块本地文件夹修改的匹配目录和文件。这应该是所有需要的。

由于mcmil正确地指出的那样,在自己的命名空间创建一个模块,并从核心类扩展。通过这样做,您可以编写更少的代码并创建更少的代码。它还可以改善您未来的升级途径。

如果只是整个文件从应用程序/代码/核心拷贝到应用程序/代码/本地,然后将核心文件/类获取在未来的Magento更新,你可能会错过这些的改变而改变。如果您正在使用模块从核心类扩展,那么当您更新Magento时,您的新类将继承这些更改。