Umgang mit veralteten "Mysql4" -Klassen beim Umschreiben von Ressourcenmodellen

8

Ich muss umschreiben Mage_Catalog_Model_Resource_Category_Flat.

Die alte Ressourcenklasse Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flatist aus Gründen der Abwärtskompatibilität in Magento 1.7 noch vorhanden und erweitert die neue.

Eine Suche in der Codebasis nach dem vollständigen Modellalias resource_eav_mysql4_category_flatergab kein Ergebnis. Aber der config.xmlvon Mage_Catalog enthält diese Zeile:

<deprecatedNode>catalog_resource_eav_mysql4</deprecatedNode>

Und ich weiß nicht, wo und wie deprecatedNodeverwendet wird.

Welche Schwierigkeiten sind beim Umschreiben eines solchen Ressourcenmodells zu erwarten? Soll ich beide Klassen umschreiben? Oder kann ich die mysql4-Klasse ignorieren?

Fabian Schmengler
quelle

Antworten:

5

Wenn Sie eine Erweiterung für den persönlichen Gebrauch entwickeln, die nur für Ihr auf Magento 1.6+ basierendes Projekt funktionieren soll, gibt es keine Sorgen. Sie sollten dies nur überschreiben, Mage_Catalog_Model_Resource_Category_Flatindem Sie dies in die config.xmlDatei Ihrer Erweiterung einfügen:

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

Wenn Sie eine Erweiterung erstellen und möchten, dass sie mit Version vor 1.6 funktioniert, müssen Sie auch die Mage_Catalog_Model_Resource_Eav_Mysql4_Category_FlatKlasse überschreiben . In diesem Fall sollte Ihr config.xmlAbschnitt folgendermaßen aussehen:

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

Sie sollten Ihre gesamte Logik einfügen Namespace_Module_Model_Resource_Category_Flatund die Klasse für Versionen vor 1.6 sollte folgendermaßen aussehen:

class Namespace_Module_Model_Resource_Eav_Mysql4_Category_Flat extends Namespace_Module_Model_Resource_Category_Flat
{
}

Auf diese Weise verwenden beide Versionen denselben Code.

Marius
quelle
7

deprecatedNodewird von Magento verwendet, um zu versuchen, das mysql4*Ressourcenmodell zu laden , wenn resource* es nicht gefunden wurde. Verweisen Sie auf die Kommentare von Mage_Core_Model_Config::getGroupedClassNameund 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.
 */

Wenn es ein resource*Modell gibt, sollten Sie es neu schreiben, andernfalls schreiben Sie mysql4*eines neu. Beispiel für das Umschreiben des mysql4*Ressourcenmodells:

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

Die mysql4*Klassen dienen nur der Abwärtskompatibilität für vorhandene Implementierungen, die sie bereits erweitert haben. Dh Shell-Klassen, um zu vermeiden, dass vorhandener Code gezwungen wird, die Erweiterungen für alles zu aktualisieren, um weiter zu arbeiten.

Dmytro Zavalkin
quelle