Comment gérer les classes obsolètes «Mysql4» lors de la réécriture des modèles de ressources


8

Je dois réécrire Mage_Catalog_Model_Resource_Category_Flat.

L'ancienne classe de ressources Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flatest toujours là dans Magento 1.7 pour une compatibilité descendante et étend la nouvelle.

Une recherche dans la base de code pour l'alias de modèle complet resource_eav_mysql4_category_flatn'a donné aucun résultat. Mais le config.xmlde Mage_Catalog contient cette ligne:

<deprecatedNode>catalog_resource_eav_mysql4</deprecatedNode>

Et je ne sais pas où et comment deprecatedNodeest utilisé.

À quelles difficultés peut-on s'attendre lors de la réécriture d'un tel modèle de ressources? Dois-je réécrire les deux classes? Ou puis-je ignorer en toute sécurité la classe mysql4?

Réponses:


5

Si vous développez une extension pour un usage personnel qui est censée fonctionner uniquement pour votre projet basé sur Magento 1.6+, il n'y a pas de soucis. Vous ne devez remplacer Mage_Catalog_Model_Resource_Category_Flatqu'en ajoutant ceci dans le config.xmlfichier de votre extension:

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

Si vous construisez une extension et que vous souhaitez qu'elle fonctionne sur la version antérieure à 1.6, vous devez également remplacer la Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flatclasse. Dans ce cas, votre config.xmlsection devrait ressembler à ceci:

<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>

Vous devez mettre toute votre logique Namespace_Module_Model_Resource_Category_Flatet la classe des versions antérieures à 1.6 devrait ressembler à ceci:

class Namespace_Module_Model_Resource_Eav_Mysql4_Category_Flat extends Namespace_Module_Model_Resource_Category_Flat
{
}

De cette façon, les deux versions utilisent le même code.


7

deprecatedNodeest utilisé par Magento pour essayer de charger le mysql4*modèle de ressource s'il resource* n'a pas été trouvé. Référencez les commentaires de Mage_Core_Model_Config::getGroupedClassNameet 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.
 */

S'il existe un resource*modèle, vous devez le réécrire, sinon réécrire mysql4*un. Exemple de réécriture du mysql4*modèle de ressource:

<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>

Les mysql4*classes ne sont là que pour la compatibilité descendante des implémentations existantes qui les ont déjà étendues. C'est-à-dire les classes shell pour éviter de forcer le code existant à mettre à jour les extensions sur tout pour continuer à fonctionner.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.