Magento ontwikkelaars tutorial les 4 / 14

In deel 4 van de Magento ontwikkelaars tutorial behandelen we Magento modellen (models) en hoe de database gekoppelt is aan deze modellen. Ik raad je aan om de voorafgaande lessen eerst goed doorgenomen te hebben. Klik hier om te navigeren naar de vorige les, het aanmaken van een blok in Magento. Om de plugin die wij op dit moment aan het opzetten zijn wat meer te laten doen dan alleen maar tekst te tonen in je webshop, gaan we de plugin een aantal gegevens laten opslaan in de database.

Wat vooraf ging

In de voorafgaande les hebben we een plugin opgezet met een controller, een blok en de bijbehorende template. Onze plugin werkt goed en ik denk dat je al door begint te krijgen hoe een plugin in Magento werkt. Een plugin dat alleen maar tekst weergeeft is niet erg behulpzaam of erg gecompliceerd zoals je gemerkt hebt. In deze les passen wij onze plugin aan zodat deze gaat kijken naar gegevens in de database (via MySQL) om deze vervolgens in een Magento blok te tonen.

Magento modellen en de database

We gaan een tabel aanmaken in de database van je Magento webwinkel installatie. Laten we voor het gemak uitgaan dat onze plugin een adresboek is, en we willen dat het Magento blok alle gegevens toont die in het adresboek te vinden is. Deze tabel ziet er als volgt uit:

voer hier een x aantal gegevens in, bijvoorbeeld: Marco Bax 0612345678 en een aantal van je eigen contacten.

Om een tabel toe te voegen aan je Magento installatie voer je de onderstaande code uit. In dit voorbeeld gaan we een tabel aanmaken genaamd marcobax_test. Voer de volgende query uit:

Let er wel op dat je eerst je database geselecteerd hebt! Na het uitvoeren van bovenstaande query heb je een nieuwe tabel toegevoegd aan je Magento webwinkel. Om te kunnen praten met deze tabel via Magento zullen we een model moeten aanmaken.

Declareer het model in config.xml

Zoals je weet maakt Magento gebruik van het MVC (Model View Controller) model. Hierbij is het noodzaak om een model te maken om met de database te kunnen communiceren. Je hebt al gezien hoe je een template aan maakt in Magento. Om een model te defineren zul je deze moeten toevoegen in de config.xml van je Magento plugin. Open het bestand app/code/local/Marcobax/All/etc/config.xml en voeg onderstaande code toe in de <global> scope na de declaratie <blocks>.

Dit configuratiebestand laat weten dat de model classes zullen worden verwacht (deze gaan we dus aanmaken) in de map: app/code/local/Marcobax/All/Model. De resource node geeft aan dat deze plugin gebruik mag maken om zowel te lezen als te schrijven (core_write & core_read) in de database. Dit gaat van pas komen wanneer we data willen gaan opslaan in de marcobax_test database tabel.

Wat er ook gedefineerd wordt in dit configuratiebestand is dat classes die in de map: app/code/local/Marcobax/All/Model/Mysql4/ zich bevinden (+ entity class) de tabel marcobax_test gaan representeren. Met andere woorden: aan de hand van deze classes kunnen we de database tabel op een makkelijke manier gaan aanspreken.

Maak het model aan

We hebben zojuist het database tabel model gedefineert, nu gaan we deze ook daadwerkelijk aanmaken. Maak de onderstaande drie mappen aan:

  • app/code/local/Marcobax/All/Model
  • app/code/local/Marcobax/All/Model/Mysql4
  • app/code/local/Marcobax/All/Model/Mysql4/Test

Maak vervolgens het bestand Test.php aan in de map: app/code/local/Marcobax/All/Model en voer onderstaande PHP code in:

Dit is ons test model en op deze manier laat je Magento weten dat er een logische entiteit genaamd Test is. Navigeer nu naar de map: app/code/local/Marcobax/All/Model/Mysql4 en maak daar ook een bestand Test.php aan (let op hoofdlettergebruik!). Voer in dit bestand onderstaande code in:

Dit is waar je het model specificeerd voor deze resource, namelijk marcobax/test zal worden gebruikt als primaire sleutel voor de id_marcobax_test. Let op dat dit veld autoincrementeel werkt en de primaire sleutel van je database tabel (marcobax_test) is.

Maak nu het bestand Collection.php aan in de map: app/code/local/Marcobax/All/Model/Mysql4/Test met de volgende inhoud:

Dit bestand wordt gebruikt om het model te defineren voor je collection van marcobax/test. Een collection is een verzameling objecten van hetzelfde type. Bijvoorbeeld producten, de collection van producten bestaat uit 1 of meerdere objecten van het type product. Je kunt filters toepassen op collection classes, om bijvoorbeeld alle producten op te halen uit de categorie “nieuw”. Het meest belangrijkste op dit moment is dat je weet hoe je de model structuur (inclusief mappen) aan moet maken voor je plugin. Pas wanneer je bovenstaande stappen hebt doorlopen is het mogelijk om met je model te communiceren met database tabellen.

Tonen van gegevens in ons blok

In het vorige deel van deze tutorial hebben we een Magento blok aangemaakt in app/code/local/Marcobax/All/Block met de naam mijnblok. We gaan dit blok gebruiken om de contactgegevens te tonen die zich in de tabel marcobax_test bevinden. Begin allereerst om wat sample data (voorbeeld data) toe te voegen in deze tabel. Nadat je dit hebt gedaan open je het bestand Mijnblok.php en pas deze aan zodat deze dezelfde code bevat als onderstaand voorbeeld:

Wanneer je bovenstaande code doorneemt zul je begrijpen wat deze precies doet, het is geen complexe materie. De methode toont alle gevonden contactgegevens onder elkaar in een Magento blok. Wanneer je toch niet snapt wat deze code doet, laat dan een reactie achter met behulp van het reactieformulier dat je op deze pagina kunt vinden.

Je kunt ook in plaats van $contact->getData(‘surname’) dit gebruiken: $contact->getSurname();

Test de code door naar: http://mijnwebshop.nl/marcobax te navigeren. Meem de vorige les door om te begrijpen hoe dit blok uiteindelijk getoond wordt.

Huiswerk om nog beter te worden in Magento

Om de opzet nog beter in je geheugen te plaatsen geef ik je een klein beetje huiswerk. Maak een plugin aan from scratch alvorens je begint aan het volgende deel van deze Magento tutorial “Model, Collecties en formulieren”. In principe zou je het opzetten van een plugin moeten kunnen dromen! Oefen met behulp van gegeven voorbeelden in deze tutorial, maak bijvoorbeeld een plugin aan waarmee jij je gehele film verzameling (collection!) kunt tonen.

Download de bronbestanden van deze les.

Om de code eens goed te kunnen doornemen kun je gebruik maken van onderstaande link om de bronbestanden uit deze les te downloaden:

[wpdm_file id=3]

 

Ga terug naar het overzicht –of– ga naar les 5; model, collecties en formulieren.

3 antwoorden

  1. Peter 16 april 2014 / 8:20 pm

    Marco, super ik heb de komende tijd weer wat te doen !

    • Marco Bax 16 april 2014 / 8:23 pm

      Ik ben al bezig met het volgende deel, helaas is dat niet zomaar geschreven! Als je dat wilt kan ik je op de hoogte houden van een nieuw hoofdstuk.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *