Come gestire le classi obsolete "Mysql4" quando si riscrivono i modelli di risorse


8

Devo riscrivere Mage_Catalog_Model_Resource_Category_Flat.

La vecchia classe di risorse Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flatè ancora lì in Magento 1.7 per compatibilità con le versioni precedenti ed estende la nuova.

Una ricerca nella base di codice per l'alias del modello completo resource_eav_mysql4_category_flatnon ha prodotto alcun risultato. Ma il file config.xmlMage_Catalog contiene questa riga:

<deprecatedNode>catalog_resource_eav_mysql4</deprecatedNode>

E non so dove e come deprecatedNodevenga utilizzato.

Quali difficoltà ci si possono aspettare quando si riscrive un tale modello di risorse? Devo riscrivere entrambe le classi? O posso tranquillamente ignorare la classe mysql4?

Risposte:


5

Se sviluppi un'estensione per uso personale che dovrebbe funzionare solo per il tuo progetto basato su Magento 1.6+, non ci sono preoccupazioni. Dovresti sovrascrivere solo Mage_Catalog_Model_Resource_Category_Flataggiungendolo nel config.xmlfile della tua estensione:

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

Se si sta creando un'estensione e si desidera che funzioni sulla versione precedente alla 1.6, è necessario sostituire anche la Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flatclasse. In questo caso la tua config.xmlsezione dovrebbe apparire così:

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

Dovresti inserire tutta la tua logica Namespace_Module_Model_Resource_Category_Flate la classe per le versioni precedenti alla 1.6 dovrebbe apparire così:

class Namespace_Module_Model_Resource_Eav_Mysql4_Category_Flat extends Namespace_Module_Model_Resource_Category_Flat
{
}

In questo modo entrambe le versioni usano lo stesso codice.


7

deprecatedNodeviene utilizzato da Magento per provare a caricare il mysql4*modello di risorsa se resource* non viene trovato. Fai riferimento ai commenti di Mage_Core_Model_Config::getGroupedClassNamee 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.
 */

Se esiste un resource*modello, è necessario riscriverlo, altrimenti riscriverne mysql4*uno. Esempio di riscrittura del mysql4*modello di risorse:

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

Le mysql4*classi sono lì solo per compatibilità con le versioni precedenti per implementazioni esistenti che le hanno già estese. Vale a dire le classi di shell per evitare di forzare il codice esistente per aggiornare le estensioni su tutto per continuare a funzionare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.