重写资源模型时,如何处理不推荐的“ mySQL4”类
-
16-10-2019 - |
题
我必须重写 Mage_Catalog_Model_Resource_Category_Flat
.
旧资源类 Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flat
仍在Magento 1.7中,以使其向后兼容,并扩展了新的兼容性。
在代码库中搜索完整模型别名 resource_eav_mysql4_category_flat
没有产生任何结果。但是 config.xml
mage_catalog的内容包含以下线:
<deprecatedNode>catalog_resource_eav_mysql4</deprecatedNode>
我不知道哪里以及如何 deprecatedNode
用来。
重写这样的资源模型时,期望有什么困难?我应该重写两个课程吗?还是可以安全地忽略MySQL4类?
解决方案
如果您开发了个人使用的扩展名,该扩展只能适用于您在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
{
}
这样,两个版本都使用相同的代码。
其他提示
deprecatedNode
Magento用来加载 mysql4*
资源模型如果 resource*
找不到。引用来自 Mage_Core_Model_Config::getGroupedClassName
和 Mage_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*
类仅用于向后扩展它们的现有实现的向后兼容性。 IE shell类,以避免强迫现有代码更新所有内容的扩展,以继续工作。