如何覆盖 Magento Core 模块?

发布于 2024-10-01 09:07:33 字数 165 浏览 3 评论 0原文

我想修改管理界面中的订单/销售表的代码和 PDF 生成代码,而不更改 core 目录中的文件。我该怎么做?我知道我必须创建一个新模块,该模块使用与我想要覆盖的文件相同的路径,但我不确定我还必须做什么...是否需要执行一些特殊步骤config.xml?

I want to modify the code for the Order/Sales table in the admin interface and the PDF generation code without alterting the files in the core directory. How do I do this? I understand that I have to create a new module that uses the same paths as the files I want to overwrite, but I'm not sure what else I have to do...are there some special steps to go through for the config.xml of the module??

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一片旧的回忆 2024-10-08 09:07:33

如果你想在一个单独的模块中完成它,你应该放置你的新模型(块,助手或任何你需要覆盖的东西 - 我将使用模型示例,它对于其他模块来说是相同的 - 只有控制器有很大不同)在“模型”目录中(例如: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 核心功能的最干净的方法(也许除了事件之外,但它们不能做所有事情)。

If you want to do it in a separate module, you should put your new model (block, helper or whatever you need to override - I'll be using the model example, its the same for the others - only the controllers are quite different) in the 'Model' directory (for instance: code/local/MyNamespace/MyModule/Model/Sales/Order.php). In your modules config.xml you should add:

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

Of course your own Sales_Order model should inherit from the core one. This is the cleanest way to override Magento core functionality (maybe besides events, but they can't do everything).

浅唱々樱花落 2024-10-08 09:07:33

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

Create matching directories and files that you want modified in the local folder for the module. That should be all that is needed.

心如狂蝶 2024-10-08 09:07:33

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

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

As mcmil correctly pointed out, create a module in your own namespace and extend from the core class. By doing this you are writing less code and creating less bloat. It also improves your upgrade path in the future.

If you simply copy the whole file from app/code/core to app/code/local and then the core file/class gets changed in the next Magento update you might miss out on those changes. If you are extending from the core class with your module then your new class will inherit those changes when you update Magento.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文