リソースモデルを書き換えるときに非推奨の「Mysql4」クラスを処理する方法


8

書き直さなければならないMage_Catalog_Model_Resource_Category_Flat

古いリソースクラスMage_Catalog_Model_Resource_Eav_Mysql4_Category_Flatは、下位互換性のためにMagento 1.7に引き続き存在し、新しいリソースクラスを拡張します。

完全なモデルエイリアスをコードベースで検索してresource_eav_mysql4_category_flatも、結果は得られませんでした。しかし、config.xmlMage_Catalogの次の行が含まれています。

<deprecatedNode>catalog_resource_eav_mysql4</deprecatedNode>

また、どこでどのようdeprecatedNodeに使用されているのかわかりません。

このようなリソースモデルを書き換えるときに予想される困難は何ですか?両方のクラスを書き直す必要がありますか?または、mysql4クラスを安全に無視できますか?

回答:


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

deprecatedNodeMagentoは、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*クラスはすでにそれらを拡張し、既存の実装のための後方互換性のためだけに存在します。つまり、既存のコードがすべてのエクステンドを更新するように強制して作業を続行しないようにするシェルクラス。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.