如何覆盖Magento Core模块?

时间:2010-11-08 19:22:00

标签: interface magento module override admin

我想修改管理界面中的Order / Sales表的代码和PDF生成代码,而不需要更改core目录中的文件。我该怎么做呢?我知道我必须创建一个新模块,它使用与我想要覆盖的文件相同的路径,但我不确定我还需要做什么...是否有一些特殊的步骤来完成{{ 1}}模块??

3 个答案:

答案 0 :(得分:6)

如果你想在一个单独的模块中做,你应该把你的新模型(块,助手或任何你需要覆盖的东西 - 我将使用模型示例,其他人也一样 - 只有控制器在'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核心功能的最干净的方法(可能除了事件,但他们不能做所有事情)。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

如果您只是将整个文件从app / code / core复制到app / code / local,然后在下一个Magento更新中更改核心文件/类,您可能会错过这些更改。如果您使用模块从核心类扩展,那么新类将在您更新Magento时继承这些更改。