Domanda

devo riscrivere Mage_Catalog_Model_Resource_Category_Flat.

La vecchia classe risorsa Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flat è ancora lì in Magento 1.7 per retrocompatibilità ed estende quello nuovo.

Una ricerca nella base di codice per l'intero modello di resource_eav_mysql4_category_flat alias non ha dato alcun risultato. Ma la config.xml di Mage_Catalog contiene questa linea:

<deprecatedNode>catalog_resource_eav_mysql4</deprecatedNode>

E io non so dove e come viene utilizzato deprecatedNode.

Quali sono le difficoltà ci sono per aspettarsi quando riscrivere un tale modello di risorse? Dovrei riscrivere entrambe le classi? O posso ignorare la classe MySQL4?

È stato utile?

Soluzione

Se si sviluppa un'estensione per uso personale che si suppone di lavorare solo per voi progetto generazione su Magento 1.6 + quindi non ci sono preoccupazioni. Si dovrebbe eseguire l'override solo Mage_Catalog_Model_Resource_Category_Flat aggiungendo questo nel file config.xml del proprio interno:

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

Se si sta costruendo un'estensione e lo si vuole lavorare su versione prima 1.6 è necessario sostituire la classe Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flat anche. In questo caso il vostro sezione config.xml dovrebbe assomigliare a questa:

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

Si dovrebbe mettere tutta la tua logica nel Namespace_Module_Model_Resource_Category_Flat e la classe per le versioni prima della 1.6 dovrebbe essere simile a questo:

class Namespace_Module_Model_Resource_Eav_Mysql4_Category_Flat extends Namespace_Module_Model_Resource_Category_Flat
{
}

In questo modo entrambe le versioni utilizzano lo stesso codice.

Altri suggerimenti

deprecatedNode viene utilizzato da Magento per cercare di modello di risorse carico mysql4* se resource* non è stato trovato. Fare riferimento alle osservazioni da Mage_Core_Model_Config::getGroupedClassName e 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 non c'è modello resource* si dovrebbe riscrivere, altrimenti riscrivere mysql4* uno. Esempio di riscrittura modello di risorse 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>

Le classi mysql4* sono solo per compatibilità all'indietro per le implementazioni esistenti che già li estese. Cioè classi shell da evitare costringendo codice esistente per aggiornare la estende su tutto per continuare a lavorare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top