Förstå överordnande i Magento Blocks

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.

Varför övergripande block?

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!

En blick på en inställning

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:

  • 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 / Catalog / etc / config.xml: Det är en modulkonfigurationsfil där vi konfigurerar blocköverordningar med vissa taggar enligt Magento-konventionerna.
  • app / code / local / Envato / Catalog / Block / Category / View.php: Det är vår nya blockfil som kommer att ersätta en kärna blockfil.

Skapa filer och mappar: Anpassad modul

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!

Slutsats

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!