重写资源模型时如何处理不推荐使用的“ Mysql4”类


8

我必须重写Mage_Catalog_Model_Resource_Category_Flat

Mage_Catalog_Model_Resource_Eav_Mysql4_Category_FlatMagento 1.7中仍然存在旧的资源类,以实现向后兼容,并扩展了新的资源类。

在代码库中搜索完整的模型别名resource_eav_mysql4_category_flat不会产生任何结果。但是config.xmlMage_Catalog的包含以下行:

<deprecatedNode>catalog_resource_eav_mysql4</deprecatedNode>

而且我不知道在哪里以及如何deprecatedNode使用。

重写这种资源模型时会遇到什么困难?我应该重写两个类吗?还是可以安全地忽略mysql4类?

Answers:


5

如果您开发的个人扩展应该仅适用于在Magento 1.6+上进行的项目构建,那么就不用担心。您仅应Mage_Catalog_Model_Resource_Category_Flat通过在config.xml扩展文件中添加此代码来覆盖它:

<models>
    <catalog_resource>
        <rewrite>
            <category_flat>Namespace_Module_Model_Resource_Category_Flat</category_flat>
        </rewrite>
    </catalog_resource>
</models>

如果要构建扩展,并且希望其在1.6之前的版本上运行,则还需要覆盖Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flat该类。在这种情况下,您的config.xml部分应如下所示:

<models>
    <catalog_resource><!--used for 1.6+ -->
        <rewrite>
            <category_flat>Namespace_Module_Model_Resource_Category_Flat</category_flat>
        </rewrite>
    </catalog_resource>
    <catalog_resource_eav_mysql4><!-- used for versions before 1.6 -->
        <rewrite>
            <category_flat>Namespace_Module_Model_Resource_Eav_Mysql4_Category_Flat</category_flat>
        </rewrite>
    </catalog_resource_eav_mysql4>
</models>

您应该输入所有逻辑,Namespace_Module_Model_Resource_Category_Flat并且1.6之前版本的类应如下所示:

class Namespace_Module_Model_Resource_Eav_Mysql4_Category_Flat extends Namespace_Module_Model_Resource_Category_Flat
{
}

这样,两个版本都使用相同的代码。


7

deprecatedNodemysql4*如果resource* 找不到,Magento使用它来尝试加载资源模型。从参考的意见Mage_Core_Model_Config::getGroupedClassNameMage_Core_Model_Resource::getEntity

/**
 * Backwards compatibility for pre-MMDB extensions.
 * In MMDB release resource nodes <..._mysql4> were renamed to <..._resource>. So <deprecatedNode> is left
 * to keep name of previously used nodes, that still may be used by non-updated extensions.
 */

如果有resource*模型,您应该重写它,否则重写mysql4*一个模型。重写mysql4*资源模型的示例:

<config>
    <global>
        <models>
            <review_mysql4>
                <rewrite>
                    <review_collection>AW_AdvancedReviews_Model_Mysql4_Review_Collection</review_collection>
                    <review>AW_AdvancedReviews_Model_Mysql4_Review</review>
                </rewrite>
            </review_mysql4>
        </models>
    </global>
</config>

这些mysql4*类仅用于向后兼容已扩展它们的现有实现。即外壳类,以避免强制现有代码更新所有内容的扩展以继续工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.