Magento扩展名覆盖资源文件

Magento扩展名覆盖资源文件,magento,resources,Magento,Resources,在创建Magento扩展名时,如何覆盖以下资源文件: core/Mage/Catalog/Model/Resource/Product/Indexer/Price/Default.php 我知道您可以将此文件复制到本地路径并以这种方式重写它,但我正在尝试找出如何为扩展名重写/扩展它。具体来说,config.xml语法需要是什么样的?我想知道这是否可能,因为我在网上看到的只是如何覆盖像这样的模型文件: core/Mage/Catalog/Model/Product.php 您可以通过以下操作来

在创建Magento扩展名时,如何覆盖以下资源文件:

core/Mage/Catalog/Model/Resource/Product/Indexer/Price/Default.php
我知道您可以将此文件复制到本地路径并以这种方式重写它,但我正在尝试找出如何为扩展名重写/扩展它。具体来说,config.xml语法需要是什么样的?我想知道这是否可能,因为我在网上看到的只是如何覆盖像这样的模型文件:

core/Mage/Catalog/Model/Product.php
您可以通过以下操作来实现:

<models>
  <catalog>
    <rewrite>
      <product>My_Module_Catalog_Model_Product</product>
    </rewrite>
  </catalog>
<models>
我相信你可以这样做:

<models>
  <catalog_resource_eav_mysql4>
    <rewrite>
       <product>My_Module_Catalog_Model_Resource_Eav_Mysql4_Product</attribute></product>
  </catalog_resource_eav_mysql4>
</models>
My_Module_Catalog_Model_Resource_Product_Indexer_Price_Default

我的模块目录模型资源Eav Mysql4产品

但我不知道如何处理不在Eav目录中的资源文件。有可能吗?

正如您所看到的,这也是
core/Mage/Catalog/model/
dir下的一个模型文件,因此在config.xml中对其进行扩展(重写然后扩展)看起来与任何其他模型相同

如果您不想完全覆盖它,那么只需复制到

local/Mage/Catalog/Model/Resource/Product/Indexer/Price/Default.php

正如您所看到的,这也是
core/Mage/Catalog/model/
dir下的一个模型文件,因此在config.xml中对其进行扩展(重写然后扩展)看起来与任何其他模型都一样

如果您不想完全覆盖它,那么只需复制到

local/Mage/Catalog/Model/Resource/Product/Indexer/Price/Default.php

从Zyava链接到的已接受答案的注释中,您可以检查原始模块的
config.xml
文件,查看定义了哪些模型。一旦知道了这一点,覆盖它们的语法是相同的

目录模块为资源定义了以下模型:

<global>
    <models>
        ....
        <catalog_resource>
            <class>Mage_Catalog_Model_Resource</class>
            ...
        </catalog_resource>
    </models>
</global>
这是它在自定义模块的
config.xml
文件中的外观:

<global>
    <models>
        <catalog_resource>
            <rewrite>
                <product_indexer_price_default>CompanyName_ModuleName_Model_Catalog_Resource_Product_Indexer_Price_Default</product_indexer_price_default>
            <rewrite>
        </catalog_resource>
    </models>
</global>

从Zyava链接到的已接受答案的注释中,您可以检查原始模块的
config.xml
文件,查看定义了哪些模型。一旦知道了这一点,覆盖它们的语法是相同的

目录模块为资源定义了以下模型:

<global>
    <models>
        ....
        <catalog_resource>
            <class>Mage_Catalog_Model_Resource</class>
            ...
        </catalog_resource>
    </models>
</global>
这是它在自定义模块的
config.xml
文件中的外观:

<global>
    <models>
        <catalog_resource>
            <rewrite>
                <product_indexer_price_default>CompanyName_ModuleName_Model_Catalog_Resource_Product_Indexer_Price_Default</product_indexer_price_default>
            <rewrite>
        </catalog_resource>
    </models>
</global>

我现在对Magento类重写系统的理解是,我想在扩展中重写的这个特定类不可重写,这是我在提出这个问题时没有理解的。所讨论的类实际上更像是一个抽象类,它从不直接实例化,而是由其他类进行子类化,而这些类又是重写的候选类。因此,实现我想要的正确方法是选择适当的具体子类,并以正常的方式重写它,如losttime在这里的回答所述


如何确定一个类是否是重写的候选对象?一种方法是在确定类的分组类名或URI(即
目录/product\u索引\u价格
)后,在Magento源代码中搜索它,并查看是否在任何地方使用它来实际实例化该类。

我现在对Magento类重写系统的理解,当我提出这个问题时,我不明白的是,我想在扩展中重写的这个特殊类,是不可重写的。所讨论的类实际上更像是一个抽象类,它从不直接实例化,而是由其他类进行子类化,而这些类又是重写的候选类。因此,实现我想要的正确方法是选择适当的具体子类,并以正常的方式重写它,如losttime在这里的回答所述


如何确定一个类是否是重写的候选对象?一种方法是在确定类的分组类名或URI(即
目录/product\u索引\u价格
)后,在Magento源代码中搜索它,看看是否在任何地方使用它来实际实例化该类。

感谢Anton的回复,是的,您可以将其复制到本地,但这不是我想要的。我更新并改进了我的问题,这样我想实现的目标会更加清晰。谢谢你的回复,安东,是的,你可以复制到本地,但这不是我想要的。我更新并改进了我的问题,这样我想实现的目标会更加清晰。我猜你们的意思是如何重写资源模型。如果是,那么您的问题是部分重复的,请参见此处的已接受答案。是的,我的问题是部分重复的,但是仍然没有答案,我已经知道如何重写模型,以及如何重写mysql4资源模型。我不知道如何重写mysql4目录之外的资源模型。做。。。例如,似乎不工作,我猜你的意思是如何重写资源模型。如果是,那么您的问题是部分重复的,请参见此处的已接受答案。是的,我的问题是部分重复的,但是仍然没有答案,我已经知道如何重写模型,以及如何重写mysql4资源模型。我不知道如何重写mysql4目录之外的资源模型。做。。。例如,似乎不起作用感谢您的回复losttime,您所概述的正是在Magento中重写类所使用的策略,然而,事实证明,我想要覆盖的特定类无法使用Magento扩展系统进行重写。非常好的解释我喜欢它感谢回复丢失时间,您所概述的正是在Magento中覆盖类时使用的策略,然而,事实证明,我想要重写的特定类无法使用Magento扩展系统进行重写。非常好的解释,我喜欢它