Magento ontwikkelaars tutorial les 2 / 14

Aanmaken van je eigen controller

Welkom bij deel 2 van de Magento ontwikkelaars tutorial. In dit artikel leg ik je uit hoe je een eigen controller aanmaakt in Magento. Ik raad je aan om vooraf de andere artikelen door te nemen. Het overzicht van de Magento ontwikkelaars tutorial kun je hier vinden. Met Magento kun je gemakkelijk navigeren naar je controller via de url: http://jewebsite.nl/plugin/methode

Hierbij vervang je het deel http://jewebsite.nl door je eigen domein ( of localhost ), /plugin met de namespace van je plugin en /methode met de action die je zometeen zult aanmaken in je controller.

Start door het aanmaken van je eigen module.

  1. Maak de volgende mappen structuur aan: /app/code/local/[Marcobax]/[Modulenaam]. Vervang hierbij uiteraard de namen tussen de brackets ([ ]) met je eigen keuze. Het is handig wanneer je [Marcobax] vervangt met de naam van je bedrijf of instantie. Op deze manier blijft het duidelijk van wie bepaalde code komt en kun je de code in de toekomst ook veel makkelijker terugvinden. Vervang [Modulenaam] door een naam naar keuze. De namespace is in dit voorbeeld “Marcobax” en de module heet “All”.
  2. Activeer de module in Magento. Hiervoor zul je het volgende bestand moeten aanmaken: /app/etc/module/[Marcobax]_[All].xml uiteraard zonder brackets. Voer de onderstaande XML structuur in:

Het bovenstaande bestand wordt gebruikt om al je (mogelijke) modules te defineren binnen de Marcobax namespace. Zoals te zien is zul je elke module tussen de <modules></modules> tags moeten plaatsen.

De Marcobax_All tag staat toe om de module “All” te defineren binnen de Marcobax namespace. Logischerwijs staan de parameters voor:

  • active (true): De plugin is actief.
  • active (false): De plugin is niet actief.
  • codePool (local): de module zal in de lokale code pool worden gezet, aangezien dit code is die je zelf geschreven hebt / gaat doen in de module die je in les 1 hebt aangemaakt. Magento zal hierbij de juiste bestanden vinden voor die module in het pad: /app/code/local/Marcobax/All. Let goed op dat je niet “codepool” schrijft, let op de hoofdletter P, dus: codePool.

Controleer of de plugin actief is gezet door in te loggen op de backend van Magento en te navigeren naar: System / Configuration / Advanced. In de lijst met plugins zal nu Marcobax_All moeten staan.

Het aanmaken van de controller

De controller maakt het mogelijk om code bewerkingen te doen. Maak deze aan door te navigeren naar het pad: /app/code/local/Marcobax/All.

  1.  Maak de map controllers aan in het pad: /app/code/local/Marcobax/All/. Het volledige pad wordt dus: /app/code/local/Marcobax/All/controllers. Let erop dat de mapnaam in lowercase geschreven is.
  2. Maak binnen de map controllers het bestand IndexController.php aan met onderstaande inhoud:

Wat zal er gebeuren wanneer je naar http://jesite.nl/marcobax/index gaat? Je zult merken dat de pagina niet gevonden kan worden, er zal een error optreden om dat de controller nog niet gedefineert is in je plugin.

Het configureren van je plugin via config.xml

Op dezelfde manier dat je de plugin hebt geactiveerd via Marcobax_All met behulp van het bestand Marcobax_All.xml in Magento zul je een bestand config.xml moeten aanmaken aanmaken in de map: /app/code/local/Marcobax/All/etc. Mocht de map etc niet bestaan dan zul je deze eerst moeten aanmaken. Magento zal vanaf dit punt het bestand config.xml in gaan lezen om te zien welke controller(s) er aangemaakt zijn. Plak de volgende code in het bestand config.xml:

Uitleg:

In dit gedeelte wordt de identiteit bepaald voor de Magento module om te verifieren wat je in Marcobax_All.xml hebt toegevoegd. Hiermee geef je aan dat dit de juiste plugin is en met behulp van het versie nummer kun je in de toekomst makkelijk(er) updates uitvoeren.

Hiermee defineer je de router genaamd routerfrontend (je kunt er meerdere aanmaken) welke gebruikt worden door Magento om toegang te krijgen tot je controller. In dit voorbeeld is de router standard, dit houdt in dat het hier gaat om een module die getoond zal worden in de frontend van je website. Een andere optie zou admin kunnen zijn.

Punt van aandacht! Let op dat je frontName gebruikt en niet frontname. Op de meeste servers is het bestandssysteem case sensitive en zal je routing dus niet werken.

De module naam is Marcobax_All en om toegang te krijgen tot deze module via de url is:

http://jewebsite.nl/marcobax/index of http://jewebsite.nl/marcobax

Hiermee wordt standaard de IndexAction methode aangeroepen in de module All. Je kunt ook de router naam gebruiken in plaats van de frontName, echter is de frontName hetzelfde als de router naam in dit voorbeeld. Ga naar deze url om te verifieren dat je controller werkt: http://jewebsite.nl/marcobax/index. Je hoeft niet perse /index mee te geven voor deze actie, aangezien er wanneer er geen actie (Action) wordt meegegeven er altijd de index actie (IndexAction) wordt geladen. Voor een andere actie zal de url er als volgt uitzien: http://jewebsite.nl/marcobax/index/hallo. Waar hallo vertaald wordt naar public function HalloAction(){} in het bestand IndexController.php. In de volgende les maken we de actie HalloAction aan.

Nu weet je hoe je een controller kunt aanmaken, probeer het hele proces te begrijpen door het een aantal keer te herhalen. Maak bijvoorbeeld gebruik van een andere namespace, modulenaam en/of actienaam.

Download de bronbestanden

Wil je de code nog eens doornemen ? Je kunt de volledige bronbestanden van deze les verkrijgen door gebruik te maken van onderstaande link:

[wpdm_file id=1]

 

Ga terug naar het overzicht –of– ga naar les 3; aanmaken van een blok.