Ga naar inhoud
TubePress — gratis, zelf gehost & actief onderhouden
Ontwikkelaarsreferentie

Hooks & pluginontwikkeling

Breid TubePress uit met het WordPress-achtige action- en filter-hooksysteem: 15+ hookpunten, de pluginlevenscyclus en hoe je je eigen plugin bouwt en verpakt.

Plugins zijn de manier om functies toe te voegen aan TubePress zonder de kern aan te raken. Ze koppelen aan het CMS via een klein WordPress-stijl systeem van acties (eenmalige gebeurtenissen) en filters (een waarde aanpassen en teruggeven). De drie meegeleverde plugins — Age Gate, Backup Pro en CTR Ranking — zijn volledig gebouwd met dezelfde API die hier wordt gedocumenteerd.

Het hook-systeem

De statische HookSystem-klasse beheert beide soorten hooks. Callbacks worden uitgevoerd in oplopende prioriteitsvolgorde (standaard 10); elke uitzondering die een callback gooit wordt opgevangen en gelogd, zodat één slechte plugin nooit de pagina kan laten crashen.

// Actions — do something when an event fires
HookSystem::addAction('head.meta', function () {
    echo '<meta name="rating" content="adult">';
}, 10);

// Filters — receive a value, return a (possibly) changed value
HookSystem::addFilter('theme.template_data', function ($data, $template) {
    if ($template === 'home') {
        $data['promo'] = Promo::current();
    }
    return $data;
});
MethodeDoel
addAction($hook, $cb, $priority = 10)Registreer een actie-luisteraar.
doAction($hook, ...$args)Activeer een actie (de kern roept deze aan).
addFilter($hook, $cb, $priority = 10)Registreer een filter.
applyFilter($hook, $value, ...$args)Leid een waarde door de filters en geef het terug.
hasAction() / hasFilter()Controleer of er iets luistert.
removeAction() / removeFilter()Ontkoppel alle luisteraars voor een hook.

Beschikbare hook-punten

De kern activeert deze hooks. Je kunt ook eigen hooks definiëren en activeren vanuit een plugin.

Acties

HookWanneer het wordt geactiveerd
head.metaBinnenin <head>, na de CSS — voeg meta-tags, verificatietags, enz. toe.
footer.scriptsVoor </body>, na de JS — voeg analytics of widgets toe.
routes.registeredNadat alle kernroutes zijn geregistreerd, vóór de algehele pagina-afhandeling.
router.before_dispatchNet voor een gematchte handler wordt uitgevoerd. Arg: het opgeloste pad.

Filters

HookWijzigt (args)
theme.template_dataDe data-array vóór het renderen van een template. Args: ($data, $templateName).
head.cssDe gecombineerde CSS-uitvoerstring.
footer.scriptsDe gecombineerde JS-uitvoerstring.
video.card.htmlDe volledige HTML van de videokaart. Args: ($html, $video). Geef een niet-lege string terug om deze te vervangen.

Anatomie van een plugin

Een plugin is een map onder plugins/ met een manifest en een klasse die PluginInterface implementeert.

plugins/myplugin/
├── plugin.json     Manifest (name, slug, version, …)
├── myplugin.php    Main class implementing PluginInterface
├── icon.svg        Optional icon shown in the admin
└── …               Your assets, templates, migrations

Het manifest is gelijk aan dat van de meegeleverde plugins:

{
  "name": "My Plugin",
  "slug": "myplugin",
  "description": "What it does, in one sentence.",
  "version": "1.0.0",
  "author": "You",
  "requires": "1.0.0",
  "icon": "icon.svg"
}

De hoofdklasse implementeert de zes levenscyclus-methoden van PluginInterface:

MethodeAangeroepen wanneer
boot()Elke aanvraag terwijl de plugin actief is — registreer hier hooks, routes en assets.
activate()De beheerder activeert de plugin.
deactivate()De beheerder deactiveert deze.
install()Eerste activering — maak tabellen aan, initialiseer instellingen.
uninstall()De plugin wordt verwijderd — opruimen.
info()Geeft de manifestdata terug als array.

Routes en assets registreren

Doe al uw koppelingen in boot():

public function boot(): void
{
    // A front-end route
    Router::get('/promo/{code}', [PromoController::class, 'show']);

    // Inject a meta tag
    HookSystem::addAction('head.meta', [$this, 'meta']);

    // Tweak every video card
    HookSystem::addFilter('video.card.html', [$this, 'badge'], 20);
}
Zelfvoorzienend door ontwerp. Een plugin moet alles toevoegen wat het nodig heeft — zijn eigen schema, instellingen, routes, beheerpagina's en geplande taken — en deze bij het verwijderen ook weer opruimen, zonder wijzigingen aan het basis-CMS. De CTR Ranking-plugin is een goed voorbeeld hiervan.

Geplande taken in een plugin

Registreer een terugkerende taak met de CronManager vanuit boot() — het draait op de ingebouwde pseudo-cron, zodat geen systeem-crontab nodig is. Dit is hoe de CTR-plugin scores herberekent en Backup Pro geplande back-ups uitvoert.

Meegeleverde plugins als referentie

Distribueren en licenties

Je kunt een plugin privé houden, vrij delen, of verkopen via de marketplace, die ondertekende licenties en activering per domein toevoegt. Zie Thema-ontwikkeling voor het equivalent aan de presentatiekant, en de Theme API-referentie voor alles wat beschikbaar is voor templatecode.

Nog vastgelopen?

Open een ticket vanuit uw dashboard en ons team helpt u verder.

Probeer de live demo → TubePress downloaden →