如何覆盖magento核心模型(直接在app / code / core / Mage / Core / Model目录下的模型类文件)

时间:2014-03-03 10:28:31

标签: php magento model override core

我想覆盖核心模型类,但我找不到正确的方法。

我已经搜索了很多内容,但是一些示例显示了如何覆盖不在app/code/core/Mage/Core/Model文件夹的模型,并且显示了一些示例如何覆盖子目录中的模型Core dir,app/code/core/Mage/Core/Model/Resources/Eav/Mysql4/

我已经阅读了这些示例,但我仍然找不到覆盖它的方法。例如,我想覆盖app/code/core/Mage/Core/Model/Store.php

这是我使用的xml,但它不起作用。请帮我找出哪个部分是错的。提前谢谢!

app/etc/models/My_Core

<config>
    <modules>
        <My_Core>
            <active>true</active>
            <codePool>local</codePool>
        </My_Core>
    </modules>
</config>

app/code/local/My/Core/etc/config.xml

<config>
    <modules>
        <My_Core>
            <version>0.1.0</version>
        </My_Core>
    </modules>
    <global>
        <models>
            <my_core_store>
                <rewrite>
                    <class>My_Core_Model_Store</class>
                </rewrite>
            </my_core_store>
        </models>
    </global>
</config>

新的Store.php文件位于app/code/local/My/Core/Model/Store.php。而magento版本是1.8.1.0

2 个答案:

答案 0 :(得分:6)

您的config.xml有一些错误。按照这种方式进行..

< ?xml version="1.0"?>
<config>
    <modules>
        <my_core>
            <version>0.1.0</version>
        </my_core>
    </modules>
    <global>
       <models>
          <core>
              <rewrite>
                  <store>My_Core_Model_Store</Store>
              </rewrite>
          </core>
       </models>
    </global>
</config>

并且在模型类中,您需要扩展父类名称。例如:My_Core_Model_Filename extends Mage_Core_Model_Store

答案 1 :(得分:2)

对于大多数人来说,这将是

<modulename> <rewrite><path_to_file>My_Extension_Path_To_Extended_File</path_to_file> </modulename>

所以在你的情况下,它将是

<core> <rewrite><store>My_Core_Model_Store</store></rewrite> </core>

虽然,请注意,对于Mysql4或资源文件,它们是在modulename_mysql4modulename_resource下定义的。