Nel terzo e ultimo articolo di questa serie di override di Magento, spiegherò come sovrascrivere i file del controller di base. Nei due articoli precedenti di questa serie, abbiamo discusso di sovrascrivere i file principali per blocchi e modelli creando un modulo personalizzato. In questo tutorial, esamineremo i file del controller di base che sovrascrivono.
In Magento, il controller è responsabile della gestione delle richieste in arrivo, ed è una spina dorsale dell'implementazione del routing Magento. Per gestire probabilmente ogni richiesta in Magento, il controller definisce diverse azioni sotto forma di metodi della classe controller. Il metodo di azione del controller include la logica dell'applicazione correlata che interagisce con le viste e i modelli per preparare l'output di quella particolare pagina. A volte, è necessario modificare il flusso dell'esecuzione del controller per inserire codice personalizzato o modificare il codice principale.
Come ho detto nel tutorial precedente, non è mai consigliabile cambiare direttamente i file core, poiché rende davvero difficile l'aggiornamento di Magento. Per evitare ciò, dovremmo seguire il modo standard di apportare le modifiche desiderate ai file principali: dovremmo utilizzare osservatori di eventi o sovrascrivere i file principali con i nostri file modulo personalizzati. Discuteremo della caratteristica principale oggi.
In questo tutorial, creeremo un modulo personalizzato per capire come funziona la sovrascrittura del controller in Magento. In questo modulo personalizzato, vedremo come sovrascrivere una classe di controller "Prodotto" 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, è possibile fare riferimento a questo articolo sulla creazione di moduli personalizzati.
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 controller usando determinati tag come da convenzioni di Magento.app / code / / Envato / Catalogo / controllori locali / ProductController.php
: È un file di classe del controller personalizzato che verrà utilizzato per sovrascrivere la classe di controller principale "Product".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
Per prima cosa, abbiamo definito un numero di versione del modulo usando il
etichetta. Il
tag è il nome del router del controller anteriore del modulo principale "Catalog". Informa il sistema di routing che vogliamo sovrascrivere i controllori del modulo "Catalogo".
Finalmente, il
il tag è usato per informare il sistema di routing Magento che dovrebbe caricare i file del controller del modulo personalizzato, se disponibili. Ovviamente caricherà i file core del modulo "Catalogo" se non è in grado di trovarli sotto il tuo modulo.
Infine, l'unica cosa che rimane è definire una classe controller Envato_Catalog_ProductController
. Creiamo un file di controller "app / code / local / Envato / Catalog / controller / ProductController.php" e incolliamo i seguenti contenuti in quel file.
getRequest () -> getParam ('category', false); $ productId = (int) $ this-> getRequest () -> getParam ('id'); $ specifiedOptions = $ this-> getRequest () -> getParam ('opzioni'); // Prepara helper e params $ viewHelper = Mage :: helper ('catalog / product_view'); $ params = new Varien_Object (); $ Params-> setCategoryId ($ categoryId); $ Params-> setSpecifyOptions ($ specifyOptions); // Render page try $ viewHelper-> prepareAndRender ($ productId, $ this, $ params); catch (Exception $ e) if ($ e-> getCode () == $ viewHelper-> ERR_NO_PRODUCT_LOADED) if (isset ($ _ GET ['store']) &&! $ this-> getResponse () -> isRedirect ()) $ this -> _ redirect ("); elseif (! $ this-> getResponse () -> isRedirect ()) $ this -> _ forward ('noRoute'); else Mage :: logException ($ e); $ this -> _ forward ('noRoute');
Abbiamo definito un Envato_Catalog_ProductController
classe che estende il nucleo Mage_Catalog_ProductController
classe controller del modulo Catalog. La cosa importante da notare qui è che abbiamo incluso il file del controller di base "Mage / Catalog / controller / ProductController.php" prima della definizione della classe dato che Magento non lo includerà automaticamente.
Nell'esempio sopra, abbiamo sovrascritto il ViewAction
metodo del Mage_Catalog_ProductController
classe. Significa che ogni volta che una pagina dei dettagli del prodotto viene visualizzata nel front-end, chiamerà il ViewAction
metodo definito nella classe del controller personalizzato. Quindi puoi modificare il codice definito in quel metodo secondo i tuoi requisiti.
Così oggi abbiamo imparato a sovrascrivere i file del controller di base in Magento usando un modulo personalizzato. Spero ti sia piaciuta questa serie e hai imparato qualcosa di utile che puoi implementare nel tuo codice! Condividi le tue domande e i tuoi suggerimenti usando il feed qui sotto!