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

In de onderstaande beschrijvingen wordt alleen de module voor woningen uitgelicht, de werking is hetzelfde voor alle andere modules. Daarnaast worden er veel velden gebruikt in de voorbeeldcode, het kan zijn dat er voor de koppeling met jouw CRM pakket een (net iets) ander veldnaam gebruikt moet worden. Bijvoorbeeld bij het gedeelte "[Afhankelijkheden van andere velden](https://doc.tussendoor.nl/books/makelaar-plugins/page/ontwikkelingbkmrk-afhankelijkheden-van "Ontwikkeling")" wordt er gebruik gemaakt van de velden `koopprijs` en `koopconditie`, dit is voor de koppeling met het CRM van Realworks.

Alle velden voor de koppeling met jouw CRM pakket vind je onder [Velden](https://doc.tussendoor.nl/books/makelaar-plugins/chapter/velden "Velden").

--- ## Templates Het standaard thema is opgedeeld in verschillende templates.
TemplateBeschrijving
wonen/**archive.php**Wordt door WordPress geladen op de archiefpagina van woningen.
wonen/**search.php**Bevat het zoekformulier op de archiefpagina. Aparte template i.v.m. live zoeken.
wonen/**loop.php**Bevat de resultaten op de archiefpagina. Aparte template i.v.m. live zoeken.
wonen/**item.php**Compacte weergave van een woning, gebruikt vanuit *loop.php* om resultaten te renderen.
wonen/**map-info.php**Inhoud van een Google Map info venster. Wordt ingeladen door de Google Maps ondersteuning binnen de plugin.
wonen/**none.php**Wordt ingeladen vanuit *archive.php* als er geen zoekresultaten zijn.
wonen/**single.php**Wordt door WordPress geladen wanneer een enkele woning wordt bekeken.
Om het template *wonen/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. Bijvoorbeeld wanneer de plugin gekoppeld wordt met het Realworks CRM: *realworks/functions.php* en *wonen/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 module woningen.

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 woningen opgehaald en op het moment dat de bezoeker een zoekopdracht instelt worden hier de woningen getoond die voldoen aan die zoekopdracht. In deze loop is de huidige woning in de iteratie beschikbaar in de variabele `$woning`. Het is over het algemeen niet nodig om deze variabele expliciet als `global` te declareren wanneer een template gebruikt wordt, de plugin zal dit voor zijn rekening nemen. Met deze variabele kan je informatie van de woning tonen in de item.php.

Let op: Wanneer er geen gebruik gemaakt wordt van een template is de globale variabele `$woning` 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 woningen 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 woning worden opgevraagd te cachen. Bijvoorbeeld binnen de loop tijdens het weergeven van de woningen: `cache(); ?>`

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

--- ## 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 $woning->plaats; // Het volledige object voor het veld 'plaats' $woning->plaats->render(); // De plaats van de woning na transformaties $woning->plaats->value(); // De waarde van het veld plaats $woning->plaats->label(); // Label van het veld plaats $woning->plaats->is('Leeuwarden'); // Is de plaats Leeuwarden? $woning->plaats->is('Leeuwarden', 'Groningen'); // Is de plaats Leeuwarden of Groningen? $woning->plaats->isnt('Leeuwarden'); // Is de plaats niet Leeuwarden? $woning->plaats->isEmpty(); // Heeft de plaats geen waarde? $woning->plaats->hasValue(); // Heeft de plaats 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 `plaats; ?>`. 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 $woning->list->render($separator = ', '); $woning->list->count(); $woning->list->all(); $woning->list->first(); $woning->list->last(); $woning->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 `