Maatwerk met Magento 2

Magento staat algemeen bekend als een e-commerce platform dat bij uitstek geschikt is voor maatwerk. En dat is terecht. Magento 1 had vele manieren om uitbreidingen te maken of standaard gedrag aan te passen. Met de komst van Magento 2 is dit alleen nog maar beter geworden.

Dit blogartikel geeft een introductie op de belangrijkste technieken om maatwerk te realiseren in Magento 2. Ik zal de term maatwerk aanhouden voor alle aanpassingen en toevoegingen aan het systeem (inclusief modules). Ik probeer het zo licht mogelijk te houden maar dit artikel heeft een technische achtergrond.

Events / Observers

De eerste en eigenlijk meest makkelijke techniek is het gebruik van events en observers. Deze techniek was al beschikbaar in Magento 1 en werkt in Magento 2 precies hetzelfde. In de basis is dit een zenden/luisteren structuur.

Op zeer veel plekken in de code zendt Magento signalen uit, bijvoorbeeld wanneer een gedefinieerde actie plaatsvindt. Dit zijn de ‘events‘. Deze signalen geven aan welke actie heeft plaatsgevonden en kunnen aanvullende informatie bevatten.

In je code geef je aan op welke signalen (events) je wil dat jouw maatwerk reageert. Dit zijn de ‘observers‘. Deze observers worden iedere keer uitgevoerd wanneer het signaal wordt afgegeven. Deze observers kunnen dan de aanvullende informatie die het signaal uitzendt gevat uitlezen en bewerken.

Het voorbeeld van events & observers is dat je met jouw maatwerk inhaakt op vaste acties binnen het Magento systeem. Jouw code staat verder los van de actie waar je op reageert. Tevens kunnen er meerdere observers voor een event zijn welke na elkaar worden uitgevoerd. Een nadeel van deze techniek is dat je afhankelijk bent van de events die Magento uitzendt. Wanneer je iets wil bereiken op een plek waar geen event wordt uitgezonden kan je deze techniek niet gebruiken.

Dependency Injection (DI)

Magento 2 gebruikt dependency injection (DI) als een alternatief voor de Mage class uit Magento 1. Mage was overal beschikbaar en kon je altijd gebruiken om data te bereiken. De Mage class is in Magento 2 niet meer beschikbaar.

Alle code in Magento en je maatwerk heeft afhankelijkheden op andere code. In Magento 1 roep je de afhankelijkheden aan via Mage. Met dependency injection geef je in je code aan welke afhankelijkheden er zijn en Magento levert deze wanneer je ze nodig hebt. Zo wordt het veel duidelijker wat er in je code gebeurt.

Preference

Een preference is vergelijkbaar met wat een override was in Magento 1. Een bepaalde class, ergens in Magento of een module, doet iets wat je wil aanpassen of uitbreiden. Met een preference geef je aan dat het systeem niet de standaard class maar jouw class moet gebruiken. Via DI wordt dit overal in de code doorgevoerd, met wat eenvoudige configuratie. Zo kan je een specifieke functie in de standaard class aanpassen of uitbreidingen schrijven op gedrag binnen die class.

Plugin

Om te beginnen: de naam plugin is wat verwarrend. Het is makkelijk te verwarren met een plugin voor bijvoorbeeld WordPress, in de vorm van een module. De plugin techniek voor Magento 2 geeft je de mogelijkheid om de input en output van functies aan te passen. De techniek is alleen beschikbaar voor public functies.

Net als bij een preference geef je via configuratie aan op welke bestaande class jouw plugin(s) moet werken. Vervolgens geef je in jouw code aan op welke functie de plugin moet werken. Je kan daarbij kiezen uit before, after en around. Met de before techniek pas je de input variabelen aan voordat de originele functie wordt aangeroepen. Met de after techniek pas je de output van een functie aan. Met de around techniek doe je beide, je kan de input en output aanpassen.

Kiezen

Of je een preference of een plugin moet gebruiken hangt sterk af van de situatie. Wanneer je een aanvullende bewerking op de input of output van een functie wil uitvoeren is een plugin ideaal. Wil je de hele werking van een functie aanpassen? In dat geval heeft een preference de voorkeur.

Een voordeel van een plugin boven een preference is dat er meerdere plugins voor dezelfde functie kunnen zijn. Wanneer je een preference inzet, moet je altijd controleren of andere code in jouw installatie dat ook doet. Wanneer dit het geval is, moet je zorgen dat jouw preference de voorrang krijgt, of een uitbreiding is op de andere preference.

Voorbeelden

Tot zo ver de beknopte uitleg over de verschillende technieken. Wil je direct aan de gang? De Magento 2 documentatie is sterk verbeterd ten opzichte van Magento 1. Hier kan je veel informatie vinden over de technieken en het gebruik ervan.

Events / observers

Preference

Plugin

Ik kan begrijpen dat na deze technische uitleg nog onduidelijkheden zijn. Neem gerust contact op voor je vragen!



Deel dit artikel

Linkedin

Beoordeel dit artikel

0.00
Gratis e-book

succesvol met m-commerce

Download gratis het e-book ‘Succesvol met m-commerce, 75 tips voor een optimale mobiele webshop’.
We geven je in dit e-book de beste tips en adviezen om je webshop van homepage tot bedankpagina te optimaliseren voor de mobiele shopper.