In questa serie, esploriamo le funzionalità di override disponibili nel sistema di eCommerce Magento. Nel precedente articolo, abbiamo discusso su come sovrascrivere i file di core block usando un modulo personalizzato. Oggi lo estenderò e dimostrerò come è possibile sovrascrivere i file del modello di base utilizzando un file di configurazione basato su XML.
In Magento, i modelli svolgono un ruolo importante in quanto implementano la maggior parte della logica aziendale delle funzionalità principali. Vi sono momenti in cui è necessario modificare il flusso o la business logic nei modelli per implementare le funzionalità personalizzate.
Si è tentati di andare avanti e modificare direttamente i file principali, che sembra una soluzione semplice e diretta. Detto questo, è una cattiva pratica, poiché rende davvero difficile l'aggiornamento di Magento. Più file principali vengono modificati direttamente, più diventa difficile tenere traccia delle modifiche e applicarle durante ogni aggiornamento della versione!
In questo tutorial, creeremo un modulo personalizzato per capire come funziona la sostituzione del modello in Magento. In questo modulo personalizzato, vedremo come sovrascrivere una classe del modello di categoria del modulo "Catalogo" principale. L'override funziona impostando determinati tag XML secondo le convenzioni di Magento.
Presumo che tu abbia familiarità con il processo di creazione del modulo di base in Magento. In caso contrario, ecco un buon articolo che spiega le basi della creazione di moduli personalizzati. Facciamo un salto nel corso di questo tutorial!
Ecco l'elenco dei file richiesti per la configurazione desiderata:
app / etc / modules / Envato_All.xml
: È un file utilizzato per abilitare il nostro modulo personalizzato.app / code / local / Envato / Catalogo / etc / config.xml
: È un file di configurazione del modulo in cui imposteremo la sovrascrittura della classe del modello utilizzando determinati tag secondo le convenzioni di Magento.app / code / local / Envato / Catalogo / Modello / category.php
: È una classe modello del nostro modulo personalizzato che sostituirà la classe del modello base.Per prima cosa, dobbiamo creare un file di abilitazione del modulo. Crea un file "app / etc / modules / Envato_All.xml" e incolla i seguenti contenuti in quel file. Noi abbiamo usato Envato
come il nostro spazio dei nomi del modulo e Catalogare
come il nome del nostro modulo. Abiliterà il nostro modulo "Catalogo" per impostazione predefinita.
vero Locale
Successivamente, dobbiamo creare un file di configurazione del modulo. Crea "app / code / local / Envato / Catalog / etc / config.xml" e incolla i seguenti contenuti in quel file.
1.0 Envato_Catalog_Model_Category
Per prima cosa, abbiamo definito un numero di versione del modulo usando il
etichetta. Dopo quello, il
e
i tag sono usati per informare il sistema di override di Magento che stiamo andando a sovrascrivere un "modello" del modulo principale "Catalogo".
Quindi, il
tag viene utilizzato per definire un'identità del modello che verrà sostituita dal Envato_Catalog_Model_Category
classe. È mappato su un file modello "Category.php" nella directory "Modello" del modulo Catalogo. Una cosa importante da notare qui è che stiamo seguendo una struttura di directory simile al modulo principale. Sebbene ciò non sia strettamente necessario, è meglio che usare una diversa struttura di directory, perché aiuta a mantenere la leggibilità.
Infine, l'unica cosa che rimane è definire una classe del modello Envato_Catalog_Model_Category
. Creiamo un file di modello "app / code / local / Envato / Catalog / Model / Category.php" e incolliamo i seguenti contenuti in quel file.
setStoreId ($ this-> getStoreId ()) -> addCategoryFilter ($ this); ritorno $ raccolta;
Abbiamo definito un Envato_Catalog_Model_Category
classe che estende il nucleo Mage_Catalog_Model_Category
classe del modello del modulo "Catalogo". Pertanto, è possibile sovrascrivere ogni metodo della classe base e creare nuovi metodi, se necessario.
Nell'esempio sopra, il getProductCollection
il metodo è sovrascritto quindi verrà chiamato al posto del metodo definito nella classe del core model! È possibile modificare il codice del modello secondo le proprie esigenze.
Quando si esegue l'override di qualsiasi metodo nei modelli, è necessario assicurarsi che il tipo di dati del valore restituito di tale metodo corrisponda al tipo di dati del metodo della classe base. Poiché i metodi dei modelli sono chiamati da diversi moduli core, dovremmo assicurarci che non infranga altre funzionalità!
Anche se questo è un esempio molto semplice, serve allo scopo di scavalcare il modello core, ed è possibile estenderlo secondo i vostri requisiti personalizzati.
In questo tutorial, abbiamo imparato come sovrascrivere i file del modello di base in Magento usando un modulo personalizzato. Nella prossima e ultima parte di questa serie di sovrascrittura, vedremo come sovrascrivere i file del controller principale. Non esitate a lasciare i vostri commenti qui sotto!