Naslag
PHP-uitbreidingspunten
Libraries, variabelen, template-lokale logica en de data-API voor resources.
Eigen shortcode-libraries
Eigen shortcode-libraries staan als losse PHP-bestanden in ext/lib/:
ext/lib/prepare-events.php
Het oudere mapformaat wordt voor compatibiliteit nog ondersteund:
ext/lib/prepare-events/prepare-events.php
Gebruik het mapformaat alleen als de library hulpbestanden nodig heeft die naast het hoofdbestand horen.
De functie moet <name>_sc($params) heten, met streepjes vervangen door underscores:
<?php
function prepare_events_sc($params)
{
// Read a variable set by [#data#] or [#set#]
$events = get_variable('data.event');
$result = [];
$today = date('Y-m-d');
foreach ($events as $event) {
if ($event['date'] >= $today) {
$result[] = $event;
}
}
// Write back - [#repeat data.event#] will now only see future events
set_variable('data.event', $result);
}
In templates aangeroepen zoals elke andere shortcode:
[#data event filter=published:1 sort=date|string|asc#]
[#prepare-events#]
[#repeat data.event#]
PHP-API voor variabelen
| Functie | Beschrijving |
|---|---|
get_variable('data.event') |
Leest elke templatevariabele via een pad met punten |
set_variable('data.event', $value) |
Schrijft een variabele op het opgegeven pad |
set_variable_dot('record', $array) |
Schrijft een associatieve array als variabele met punten (record.field, record.uuid, enzovoort) |
Libraries voor één template (.inc)
Niet elke library is een herbruikbare bouwsteen. Sommige PHP-bestanden bestaan alleen om één template te bedienen: opstartlogica, datavoorbereiding voor één pagina, of eenmalige configuratie die niet in de gedeelde naamruimte ext/lib/ hoort.
Zet die als (shortcode-name).inc-bestanden naast de template die ze gebruikt:
core/tpl/html/
init.tpl
create-settings.inc ← loaded only when called from init.tpl
find_library() kijkt eerst in de map van de aanroepende template of daar een passende .inc staat, voordat het terugvalt op ext/lib/ of core/lib/. Omdat het zoeken de stapel shortcodes volgt, komt het uit bij de map van de binnenste aanroepende template; [#create-settings#], aangeroepen vanuit core/tpl/html/init.tpl, vindt dus core/tpl/html/create-settings.inc en geen gedeelde library.
De extensie .inc betekent "privé / intern". Templates in andere mappen zien deze bestanden niet.
Regels:
- Gebruik
.incvoor logica die alleen binnen één template zin heeft en elders niet zou worden hergebruikt. - De functienaam volgt nog steeds de afspraak
<name>_sc($params). - Geef een
.inc-bestand niet de naam van een gedeelde library (data.inc,url-key.inc): het lokale bestand zou de gedeelde library binnen die template ongemerkt vervangen. routeis een verboden naam voor een shortcode:route.inchoort alleen bij het routingsysteem en kan niet als library worden gebruikt.
PHP-data-API (beschikbaar in .install.inc en route.inc)
| Functie | Beschrijving |
|---|---|
data_create_resource($name, $meta) |
Maakt een nieuwe resource met de opgegeven .meta-definitie |
data_create($resource, $uuid, $data) |
Maakt een nieuw record |
data_read($resource, $uuid) |
Leest één record op UUID |
data_exists($resource, $uuid) |
Geeft true als een record bestaat |
load_library($name) |
Laadt een shortcode-library zodat de PHP-functies ervan beschikbaar zijn |