# Ontwikkeling Bij de aanschaf van onze IGB 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 objecten. 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.

--- ## Templates Het standaard thema is opgedeeld in verschillende templates.
TemplateBeschrijving
vacature/**archive.php**Wordt door WordPress geladen op de archiefpagina van vacatures.
vacature/**search.php**Bevat het zoekformulier op de archiefpagina. Aparte template i.v.m. live zoeken.
vacature/**loop.php**Bevat de resultaten op de archiefpagina. Aparte template i.v.m. live zoeken.
vacature/**item.php**Compacte weergave van een vacature, gebruikt vanuit *loop.php* om resultaten te renderen.
vacature/**none.php**Wordt ingeladen vanuit *archive.php* als er geen zoekresultaten zijn.
vacature/**single.php**Wordt door WordPress geladen wanneer een enkele vacature wordt bekeken.
Om het template *vacature/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: *ingoedebanen/functions.php* en *vacature/functions.php.* De eerst genoemde om code van toepassing op alle onderdelen van de plugin te plaatsen en de tweede functions is specifiek voor vacatures.

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.

The loop Binnen de loop worden zonder zoekopdracht alle vacatures opgehaald en op het moment dat de bezoeker een zoekopdracht instelt worden hier de vacatures getoond die voldoen aan die zoekopdracht. In deze loop is de huidige vacature in de iteratie beschikbaar in de variabele `$vacature`. 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 de vacature tonen in de item.php. 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 vacatures 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 vacature worden opgevraagd te cachen. Bijvoorbeeld binnen de loop tijdens het weergeven van de vacatures: `cache(); ?>`

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

--- ## 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 $vacature->organisatie; // Het volledige object voor het veld 'organisatie' $vacature->organisatie->render(); // De organisatie van de vacature na transformaties $vacature->organisatie->value(); // De waarde van het veld organisatie $vacature->organisatie->label(); // Label van het veld organisatie $vacature->organisatie->is('Tussendoor'); // Is de organisatie Tussendoor? $vacature->organisatie->is('Tussendoor', 'Verbonden'); // Is de organisatie Tussendoor of Verbonden? $vacature->organisatie->isnt('Tussendoor'); // Is de organisatie niet Tussendoor? $vacature->organisatie->isEmpty(); // Heeft de organisatie geen waarde? $vacature->organisatie->hasValue(); // Heeft de organisatie 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 de plaats ook simpel het volgende schrijven `organisatie; ?>`. 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 CRM pakket vind je allemaal terug onder het hoofdstuk 'velden'. Arrays ```PHP $vacature->list->render($separator = ', '); $vacature->list->count(); $vacature->list->all(); $vacature->list->first(); $vacature->list->last(); $vacature->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 `