如何用尽可能少的复制粘贴覆盖Magento模型类?

如何用尽可能少的复制粘贴覆盖Magento模型类?,magento,Magento,我想在单个方法中更改一行代码,例如类Mage\u Reports\u Model\u Resource\u Product\u Collection。最简单的方法似乎是将整个类文件复制到app/code/local/…,但是我已经替换了原始类,而不是重写了一个方法 如何创建一个新类,该类继承自例如Mage\u Reports\u Model\u Resource\u Product\u Collection,并且仅覆盖一个方法?并且仍然告诉Magento使用我的新类而不是原来的类。理论上,模型的

我想在单个方法中更改一行代码,例如类
Mage\u Reports\u Model\u Resource\u Product\u Collection
。最简单的方法似乎是将整个类文件复制到
app/code/local/…
,但是我已经替换了原始类,而不是重写了一个方法


如何创建一个新类,该类继承自例如
Mage\u Reports\u Model\u Resource\u Product\u Collection
,并且仅覆盖一个方法?并且仍然告诉Magento使用我的新类而不是原来的类。

理论上,模型的重写将是

<config>
    <global>
        <models>
            <reports>
                <rewrite>
                    <resource_product_collection>Namespace_Extension_Model_Resource_Product_Collection</resource_product_collection>
                </rewrite>
            </reports>
        </models>
    </global>
</config>

名称空间\扩展\模型\资源\产品\集合

不过,我个人从未重写过资源模型,所以我不能保证它会起作用。这在很大程度上取决于集合的加载方式。

理论上,模型的重写将是

<config>
    <global>
        <models>
            <reports>
                <rewrite>
                    <resource_product_collection>Namespace_Extension_Model_Resource_Product_Collection</resource_product_collection>
                </rewrite>
            </reports>
        </models>
    </global>
</config>

名称空间\扩展\模型\资源\产品\集合

不过,我个人从未重写过资源模型,所以我不能保证它会起作用。这在很大程度上取决于集合的加载方式。

以下是重写产品集合的工作代码:

<global>
    <models>
        <reports_resource>
            <rewrite>
                <product_collection>Company_ModelName_Model_Resource_Product_Collection</product_collection>
            </rewrite>
        </reports_resource>
    </models>
</global>

公司\型号名称\型号\资源\产品\集合
它应该适用于
Mage::getResourceModel('reports/product_collection')
调用


是的,我还没有包括
标签,我想你应该已经有了
标签,所以我觉得没有必要了。

以下是重写产品系列的工作代码:

<global>
    <models>
        <reports_resource>
            <rewrite>
                <product_collection>Company_ModelName_Model_Resource_Product_Collection</product_collection>
            </rewrite>
        </reports_resource>
    </models>
</global>

公司\型号名称\型号\资源\产品\集合
它应该适用于
Mage::getResourceModel('reports/product_collection')
调用


是的,我还没有包括
标记,我想你甚至应该已经有了
标记,所以我觉得没有必要。

创建模块或将覆盖的方法添加到一个使用过的模块中。或者,您可以在代码调用的
app/design
中编辑模板文件。您应该阅读Magento中的类重写,这里是Alan Storm博客的链接-谢谢,我已经尝试过了,但不知道如何重写上面提到的类。创建模块或将重写的方法添加到使用过的模块之一。或者,你可以在你的代码调用的
app/design
中编辑模板文件。你应该阅读Magento中的类重写,这里是Alan Storm的博客链接-谢谢,我已经尝试过了,但不知道如何重写上面提到的类。这应该是
报告
,在XML定义和工厂调用中没有
目录
。谢谢@Jürgen!我忽略了一个事实,那就是它是报表模块产品集合,而不是目录集合。在花了一些时间调试之后,我已经修复了响应,似乎问题中的类不是通过
Mage::getResourceModel
加载的,而是由例如
Mage\u Reports\u Model\u Resource\u Product\u Ordered\u Collection
继承的。。。既然我想修改超类,这是否意味着我们正在考虑一种多重继承的情况?这应该是XML定义和工厂调用中的
报告
,而不是
目录
。谢谢@Jürgen!我忽略了一个事实,那就是它是报表模块产品集合,而不是目录集合。在花了一些时间调试之后,我已经修复了响应,似乎问题中的类不是通过
Mage::getResourceModel
加载的,而是由例如
Mage\u Reports\u Model\u Resource\u Product\u Ordered\u Collection
继承的。。。既然我想修改超类,这是否意味着我们正在考虑一种多重继承的情况?