Concepten

Libraries

Bedrijfslogica en datavoorbereiding in PHP, aangeroepen als shortcode.

Een library is een PHP-bestand in ext/lib/ met bedrijfslogica of datavoorbereiding. Je roept het vanuit een template aan als shortcode, zodat templates zonder logica blijven en de logica op één testbare plek staat.

Een library schrijven

De bestandsnaam is de naam van de shortcode. De functie heeft die naam met streepjes vervangen door underscores, gevolgd door _sc:

<?php
// ext/lib/prepare-projects.php

function prepare_projects_sc($params)
{
    $projects = get_variable('data.projects') ?: [];
    $year = (int)date('Y');
    $recent = array_filter($projects, fn($project) => (int)$project['year'] >= $year - 2);
    set_variable('data.recent_projects', $recent);
}
[#data projects filter=published:1#]
[#prepare-projects#]
[#repeat data.recent_projects tpl=card-project#]

De library leest variabelen, berekent wat de pagina nodig heeft en schrijft het resultaat terug als variabelen. De template toont het daarna.

Een library kan ook een waarde teruggeven, die de shortcode dan toont. Dat past bij kleine indelingen:

function project_status_sc($params)
{
    $project = get_variable('project');
    return empty($project['published']) ? 'draft' : 'live';
}
[#badge-[#project-status#]#]

Parameters uit de template komen binnen in $params: [#price amount=12.5 currency=EUR#] geeft $params['amount'] en $params['currency'], en get_param_value($params, 'currency', 'EUR') leest er één met een standaardwaarde. Een waarde zonder naam, zoals in [#price 12.5#], is het eerste item, current($params).

Markup blijft in templates

Een library bereidt data voor; hij bouwt geen HTML. Moet een library een template tonen, dan roept hij run_buffered() aan met het bestandspad van de template. Door markup buiten PHP te houden, kan een designer elk stuk interface aanpassen zonder logica aan te raken, en kun je logica testen zonder markup.

De PHP-gereedschapskist

Functie Doet
get_variable('data.projects') Leest een templatevariabele via het pad met punten
set_variable('name', $value) Schrijft een templatevariabele
set_variable_dot('project', $record) Schrijft een record zodat de velden project.title, project.year zijn
load_library('data') Laadt een andere library, bijvoorbeeld de datalaag
data_read($resource, $uuid) Leest één record
data_query($resource, [...]) Leest een gefilterde, gesorteerde pagina met records, met het totaal
data_create(), data_update(), data_delete() Schrijft records, met validatie, indexen, geschiedenis en events
env('KEY') Leest een instelling uit .env

De volledige lijst staat bij PHP-uitbreidingspunten.

Libraries voor één template

Een library die maar één template bedient, kan ernaast staan als <name>.inc. Die wordt alleen vanuit die template en zijn map gevonden, en blijft buiten de gedeelde naamruimte.

Verder lezen

  • Templates voor de presentatiekant.
  • Modules om libraries met routes en data te verpakken.

Bekijk deze pagina als Markdown