# Ontwikkeling Bij de aanschaf van onze Autobedrijf & Voertuigen plugin ontvang je een standaard thema, deze kan je als child-theme naast je hoofd thema installeren. Hierdoor kan je je hoofdthema up-to-date houden en verlies je geen instellingen van onze plugin. Binnen dit thema werk je aan de ontwikkeling van de betreffende pagina's, zoals het overzicht en de detailpagina van de voertuigen. Je schrijft zelf de HTML, CSS, PHP en eventueel extra Javascript om de pagina's vorm te geven.

Je kan deze pagina's niet bewerken vanuit WordPress, ook niet met page builders zoals Elementor.

Daarnaast worden er veel velden gebruikt in de voorbeeldcode, het kan zijn dat er voor de versie van jouw plugin andere velden in de code gebruikt moet worden. Wegens de doorontwikkeling van verschillende partijen hebben wij een versie 3.x ontwikkeld, in deze versie wordt meer informatie verwerkt zoals informatie over elektrische voertuigen.

Alle velden voor de versie van jouw plugin vind je onder [Velden](https://doc.tussendoor.nl/books/autobedrijf-voertuigen/chapter/velden "Velden").

--- ## Templates Het standaard thema is opgedeeld in verschillende templates.
TemplateBeschrijving
voertuig/**archive.php**Wordt door WordPress geladen op de archiefpagina van de voertuigen.
voertuig/**search.php**Bevat het zoekformulier op de archiefpagina. Aparte template i.v.m. live zoeken.
voertuig/**loop.php**Bevat de resultaten op de archiefpagina. Aparte template i.v.m. live zoeken.
voertuig/**item.php**Compacte weergave van een voertuig, gebruikt vanuit *loop.php* om resultaten te renderen.
voertuig/**none.php**Wordt ingeladen vanuit *archive.php* als er geen zoekresultaten zijn.
voertuig/**single.php**Wordt door WordPress geladen wanneer een enkel voertuig wordt bekeken.
Om het template *voertuig/item.php* te renderen vanuit een ander template kan het volgende gebruikt worden: `` Naast de template bestanden worden er standaard de volgende bestanden automatisch ingeladen: autobedrijfvoertuigen*/functions.php* en *voertuig/functions.php.* De eerst genoemde om code van toepassing op alle onderdelen van de plugin te plaatsen en de tweede functions is specifiek voor de voertuigen.

WordPress laadt de archive, single en de functions in omdat we via de geavanceerde instellingen van de plugin het pad aangeven naar de templates. Als je het thema anders op wil bouwen moet je daarom de paden aanpassen.

Globals Binnen de loop worden zonder zoekopdracht alle voertuigen opgehaald en op het moment dat de bezoeker een zoekopdracht instelt worden hier de voertuigen getoond die voldoen aan die zoekopdracht. In deze loop is het huidige voertuig in de iteratie beschikbaar in de variabele `$voertuig`. Het is over het algemeen niet nodig om deze variabele expliciet als `global` te declareren, de plugin zal dit voor zijn rekening nemen. Met deze variabele kan je informatie van het voertuig tonen in de item.php.

Let op: Wanneer er geen gebruik gemaakt wordt van een template is de globale variabele `$voertuig` leeg. We raden daarom het gebruik van templates aan.

Caching We raden aan om een WordPress caching plugin te gebruiken om het laden van de site te versnellen. Voor het ophalen van de data voor alle voertuigen zijn veel database query's nodig, wat alles bij elkaar enkele tientallen milliseconden in beslag kan nemen. Om dit te versnellen, raden we aan om templates waarin gegevens van een voertuig worden opgevraagd te cachen. Bijvoorbeeld binnen de loop tijdens het weergeven van de voertuigen: `cache(); ?>`

Templates worden gecached op basis van de naam en ID van het huidige voertuig.

--- ## Weergave van velden Het kan voorkomen dat er specifieke eisen zijn om velden op een bepaalde manier weer te geven, soms afhankelijk van andere velden en soms omdat je een prijs als een prijs wil formatten. Om te voorkomen dat deze logica overal door het thema opnieuw geschreven wordt biedt de plugin een aantal manieren om dit op een prettige manier te laten verlopen, waarbij alles op een centrale plek aangepast kan worden. Een veld uit onze plugin is een object en kan naast het terug geven van zijn waarde nog veel meer informatie terug geven. Zo kunnen de volgende methods worden gebruikt: ```PHP $voertuig->algemeen->merk; // Het volledige object voor het veld 'merk' $voertuig->algemeen->merk->render(); // Het merk van het voertuig na transformaties $voertuig->algemeen->merk->value(); // De waarde van het veld merk $voertuig->algemeen->merk->label(); // Label van het veld merk $voertuig->algemeen->merk->is('BMW'); // Is het merk BMW? $voertuig->algemeen->merk->is('BMW', 'Audi'); // Is het merk BMW of Audi? $voertuig->algemeen->merk->isnt('BMW'); // Is het merk niet BMW? $voertuig->algemeen->merk->isEmpty(); // Heeft het merk geen waarde? $voertuig->algemeen->merk->hasValue(); // Heeft het merk een waarde? ```

**TIP:** Doordat onze plugin gebruik maakt van Magic Methods ([\_\_toString()](https://www.php.net/manual/en/language.oop5.magic.php#object.tostring)) kunnen we voor het tonen van het merk ook simpel het volgende schrijven `merk; ?>`. Voor een simpele echo is `->render()` niet nodig.

### Veld types Elk veld heeft een bepaald type zodat het weergeven ervan automatisch gebeurt. Ieder van de types heeft verder specifieke methodes als hulp. Voor de onderstaande veldtypes worden letterlijke voorbeelden in de objecten gezet, er zijn echter geen velden die letterlijk ‘list’, ‘boolean’, ‘date’, ‘dateTime’, ‘integer’ of ‘double’ heten. Deze velden referen naar velden met dat type waarde. De velden die geschikt zijn voor jouw verisevind je allemaal terug onder het hoofdstuk 'Velden'. Arrays ```PHP $voertuig->list->render($separator = ', '); $voertuig->list->count(); $voertuig->list->all(); $voertuig->list->first(); $voertuig->list->last(); $voertuig->list->implode($glue); ``` In plaats van komma gescheiden waardes kan ook gebruik worden gemaakt van een lijst. Verander hiervoor de formatter in `list`, waarbij als standaard een `