Det är alltid en viktig funktion för alla ramar som stöder förlängbarhet och skalbarhet i själva kärnan. Det är så sant för Magento, som tillåter programmerare att skapa anpassade tillägg för att uppfylla anpassade krav, vilket ger förlängbarhet. Å andra sidan tillåter du också att åsidosätta kärnfiler för att ändra flödet och beteendet hos kärnfunktionerna i Magento.
Det finns olika sätt i Magento som gör att du kan åsidosätta kärnfiler. En av dem är implementeringen av Event Observer Pattern. Med den här metoden definierar du observatörer i din modul för önskade händelser, och de kommer att hämtas när associerade händelser höjts i Magento. Det är verkligen ett kraftfullt och vanligt sätt att plugga in dina ändringar i Magento-kärnmodulerna. Med det sagt finns det situationer där du kommer att känna att det skulle vara bra om du helt enkelt kunde ersätta kärnfilerna med dina. Du kan göra det med en XML-konfigurationsfil i din anpassade modul.
I Magento är block primitive byggkomponenter för vilken layout som helst i fronten. Även om du kan åsidosätta mallfilen i ett block med ett anpassat tema för att ändra visuell utmatning, vill du ibland ändra logiken i kärnblockskoden. I så fall hjälper det att överväga ett kärnblock med din anpassade moduls blockfil verkligen att plugga in dina ändringar lätt.
I den här handledningen gör vi en anpassad modul för att förstå hur blockövergripande fungerar i Magento. I den anpassade modulen kommer vi att åsidosätta ett produktnoteringsblock som visas på kategoridisplayen. Överordnade verk genom att skapa vissa XML-taggar enligt Magento-konventionerna.
Jag antar att du är bekant med grundmodulskapet i Magento. Här är en bra artikel som förklarar grunderna i skapandet av anpassade moduler, bara om du vill ta en titt på det! Låt oss hoppa direkt till innehållet i denna handledning!
Vi skapar en enkel anpassad modul med namnet "Katalog", som ställer in överordnande av kärnproduktlistan (app / kod / kärna / Mage / Catalog / Block / Category / View.php) i kategorinsidan. Här är en lista över de filer som krävs för önskad inställning:
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 katalogmodul 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_Block_Category_View
I modulens början har vi ställt in modulversionsnumret med hjälp av
märka. Därefter
och
taggar används för att informera Magento överordnade systemet att vi kommer att åsidosätta ett av "blocken" i "Catalog" -kärnmodulen.
Vidare
tagg används för att definiera en blockidentitet som kommer att överskridas av Envato_Catalog_Block_Category_View
klass. Den är mappad till en blockfil "Category / View.php" under katalogen "Block" i Catalog module. Det viktiga att märka här är att vi följer en katalogstruktur liknande kärnmodulen. Även om det inte är absolut nödvändigt, är det föredraget över den olika katalogstrukturen för att bibehålla läsbarheten.
Slutligen är det enda som återstår att definiera en blockklass Envato_Catalog_Block_Category_View
. Låt oss skapa en blockfil "app / code / local / Envato / Catalog / Block / Category / View.php" och fyll i det med följande innehåll.
getChildHtml ( 'product_list');
Vi har definierat Envato_Catalog_Block_Category_View
klass som sträcker kärnan Mage_Catalog_Block_Category_View
blockklass. Således kan du åsidosätta varje metod i basklassen och skapa nya metoder om det behövs.
I ovanstående exempel getProductListHtml
Metoden är överdriven så det kommer att ringas på kategorinsidan! Du kan ändra koden enligt dina önskemål.
Även om det är ett mycket grundläggande exempel, tjänar det syftet att överdriva kärnblocket, och du kan tweak det för att göra sakerna mer komplexa och skapa något mer användbart!
Idag, i den första artikeln i den här serien har vi lärt oss hur man åsidosätter kärnblocken i Magento. I nästa del kommer jag fram med mer spännande saker! Jag skulle gärna höra dina kommentarer och frågor i foderet nedan!