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 .inc voor 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.
  • route is een verboden naam voor een shortcode: route.inc hoort 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

Bekijk deze pagina als Markdown