Come gestire le classi deprecato “MySQL4” per la riscrittura di modelli di risorse
-
16-10-2019 - |
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?
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.