Question

Je dois réécrire Mage_Catalog_Model_Resource_Category_Flat.

L'ancienne classe des ressources Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flat est toujours là dans Magento 1.7 pour la compatibilité ascendante et prolonge la nouvelle.

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

<deprecatedNode>catalog_resource_eav_mysql4</deprecatedNode>

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

Quelles sont les difficultés sont là pour 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?

Était-ce utile?

La solution

Si vous développez une extension pour un usage personnel qui est censé fonctionner uniquement pour votre projet de construction sur Magento 1.6+ alors il n'y a pas de soucis. Vous ne devez remplacer Mage_Catalog_Model_Resource_Category_Flat en ajoutant ceci dans le fichier config.xml 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 vous voulez travailler sur la version avant 1.6 vous devez remplacer la classe de Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flat aussi. Dans ce cas, votre section config.xml 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 devriez mettre toute votre logique Namespace_Module_Model_Resource_Category_Flat et la classe pour les 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.

Autres conseils

deprecatedNode est utilisé par Magento pour essayer le modèle de charge des ressources mysql4* si resource*  n'a pas été trouvé. Référence les commentaires de Mage_Core_Model_Config::getGroupedClassName et 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.
 */

En cas de modèle resource* vous devez le réécrire, sinon réécrire d'une mysql4*. Exemple de réécriture modèle de ressources 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>

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top