I den tredje och sista artikeln i den här övergripande serien i Magento kommer jag att förklara hur man överstyrar kärnkontrollens filer. I de föregående två artiklarna i denna serie diskuterade vi övergripande kärnfiler för block och modeller genom att skapa en anpassad modul. I den här handledningen tittar vi på överordnade core-kontrollerfiler.
I Magento är regulatorn ansvarig för hantering av inkommande förfrågningar, och det är en ryggrad i Magento-routing-implementeringen. För att hantera förmodligen alla förfrågningar i Magento, definierar styrenheten olika åtgärder i form av reglerklassmetoder. Regleringsåtgärdsmetoden innehåller relaterad applikationslogik som interagerar med visningar och modeller för att förbereda utmatningen på den specifika sidan. Ibland behöver du ändra flödet av kontrollerens utförande för att injicera anpassad kod eller ändra kärnkoden.
Som jag sa i den tidigare handledningen rekommenderas det aldrig att ändra kärnfiler direkt, eftersom det gör uppgraderingen av Magento väldigt svårt. För att undvika detta bör vi följa standardmetoden för att göra önskade ändringar i kärnfilerna: vi bör antingen använda händelseobservatörer eller överstyra kärnfiler med våra anpassade modulfiler. Vi diskuterar den övergripande funktionen idag.
I den här handledningen gör vi en anpassad modul för att förstå hur kontrollen överordnad fungerar i Magento. I den här anpassade modulen kan vi se hur man överstyrar en "Produkt" -kontroller klass av kärnan "Katalog" modulen. Överordnade verk genom att skapa vissa XML-taggar enligt Magento-konventionerna.
Jag antar att du är bekant med grundmodulskapet i Magento. Om inte, kan du hänvisa till den här artikeln om skapande av anpassad modul.
Här är listan över filer som krävs för önskad inställning:
app / etc / modules / Envato_All.xml
: Det är en fil som används för att aktivera vår anpassade modul.app / code / local / Envato / Katalog / etc / config.xml
: Det är en modulkonfigurationsfil där vi ska ställa in kontrollerklassens överordnade användning med vissa taggar enligt Magento-konventionerna.app / code / local / Envato / katalog / controllers / ProductController.php
: Det är en anpassad klassklassfil som vi använder för att åsidosätta kärnan "Produkt" -kontroller klassen.Först måste vi skapa en modul enabler fil. Skapa en fil "app / etc / modules / Envato_All.xml" och klistra in följande innehåll i den filen. Vi har använt Envato
som vår modul namnrymd och Katalog
som vårt modulnamn. Det aktiverar vår "Catalog" -modul som standard.
Sann lokal
Därefter måste vi skapa en modulkonfigurationsfil. Skapa "app / code / local / Envato / Catalog / etc / config.xml" och klistra in följande innehåll i den filen.
1,0 Envato_Catalog
Först har vi definierat ett modulversionsnummer med hjälp av
märka. De
taggen är routerens namn på katalogen "Katalog". Den informerar routingsystemet som vi vill åsidosätta kontrollerna av "Catalog" -modulen.
Slutligen, den
tagg används för att informera Magento-routingsystemet om att det ska ladda din anpassade modulens kontrollerfiler om det finns tillgängligt. Naturligtvis laddar det kärnfilerna i katalogen "Catalog" om det inte går att hitta dem under din modul.
Slutligen är det enda som återstår att definiera en kontrollerklass Envato_Catalog_ProductController
. Låt oss skapa en kontrollerfil "app / code / local / Envato / Catalog / controllers / ProductController.php" och klistra in följande innehåll i den filen.
getRequest () -> getParam ('category', false); $ productId = (int) $ this-> getRequest () -> getParam ('id'); $ specifyOptions = $ this-> getRequest () -> getParam ('options'); // Förbered hjälparparametrar $ viewHelper = Mage :: hjälpar ('catalog / product_view'); $ params = nytt Varien_Object (); $ Params-> setCategoryId ($ Kategorinr); $ Params-> setSpecifyOptions ($ specifyOptions); // Render page try $ viewHelper-> prepareAndRender ($ productId, $ this, $ params); fångst (Undantag $ e) if ($ e-> getCode () == $ viewHelper-> ERR_NO_PRODUCT_LOADED) om (isset ($ _ GET ['store']) &&! $ this-> getResponse () -> isRedirect ()) $ this -> _ vidarebefordra ('noRoute'); annat Mage :: logException () ($ e); $ this -> _ forward ('noRoute');
Vi har definierat en Envato_Catalog_ProductController
klass som sträcker kärnan Mage_Catalog_ProductController
controller klassen av Catalog modulen. Det viktiga att notera här är att vi har inkluderat kärnkontrollerfilen "Mage / Catalog / controllers / ProductController.php" innan klassdefinitionen, eftersom Magento inte automatiskt kommer att inkludera det.
I ovanstående exempel har vi överträtt viewAction
metod för Mage_Catalog_ProductController
klass. Det betyder att när en produktdetaljer sida ses i fronten, så kallas den viewAction
Metod definierad i din anpassade kontrollerklass. Så du kan ändra koden som definieras enligt den metoden enligt dina krav.
Så idag lärde vi oss att överstyra kärnkontrollens filer i Magento med hjälp av en anpassad modul. Jag hoppas att du har haft den här serien och lärt dig något användbart som du kan implementera i din kod! Dela dina frågor och förslag med hjälp av flödet nedan!