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.