Skip to content

Events ​

Listener werden mit Event::listen() in Plugin::boot() registriert. Nur registerIntegrations braucht register(), weil Renick.Content die Integrations-Registry in seinem eigenen boot() aufbaut. Renderer-Listener, die eine Exception werfen, werden geloggt und übersprungen.

EventArgumenteListener
renick.content.registerBlocksBlockManagergibt Block-Konfigurationen zurück, siehe Blöcke erstellen
renick.content.registerIntegrationskeinegibt Integration-Instanzen zurück, siehe Eigene Integration schreiben
renick.content.beforeRenderDocument&$blocks, $contextändert den Blockbaum, bei jedem Request
renick.content.beforeRenderBlock&$block, $previewändert einen Block oder gibt Ersatz-HTML zurück
renick.content.afterRenderBlock&$html, $block, $previewändert das HTML eines Blocks
renick.content.afterRenderDocument&$html, $contextändert das finale HTML, bei jedem Request
renick.content.formSubmit$payload: form, fields, ip, site_iderhält eine Einsendung des Formular-Blocks nach Spam- und Captcha-Prüfung, vor der Mail (der Block Einsendeformular löst es nicht aus)
renick.content.api.resolveHostTypeskeinegibt Host-Model-Klassen für REST und Bundle-Befehle zurück
renick.content.api.resolveContentFields$hostgibt die Content-Feldnamen des Hosts für REST zurück

Media- und KI-Events stehen in der PHP-API.

renick.content.beforeRenderBlock ​

Wird haltend ausgelöst, bevor Partial und Kinder eines Blocks rendern. Der erste Listener, der einen String zurückgibt, ersetzt die Ausgabe des Blocks. Mit null wird weitergerendert, inklusive der Änderungen an $block. $preview ist ['editor' => true] in der Editor-Vorschau und [] im Frontend.

Das Block-HTML im Frontend wird gecacht, daher feuern beide Block-Events nur, wenn ein Block wirklich rendert. Logik pro Request gehört in afterRenderDocument.

php
Event::listen('renick.content.beforeRenderBlock', function (array &$block, array $preview) {
    if (($block['type'] ?? '') === 'placeholder') {
        return '<div id="my-widget"></div>';
    }
    return null;
});

renick.content.afterRenderDocument ​

Wird nach dem Rendern des ganzen Dokuments ausgelöst, auch bei einem Cache-Treffer. Nutzereingaben und externe Werte mit e() escapen: Das HTML geht unverändert raus.

php
Event::listen('renick.content.afterRenderDocument', function (string &$html, array $context) {
    $html = str_replace('{{year}}', date('Y'), $html);
});

renick.content.api.resolveHostTypes ​

Die REST-API und die Befehle renick:content:import-bundle / export-bundle lösen nur Subklassen von Tailors EntryRecord, die host_types in config/api.php und die hier zurückgegebenen Klassen auf. Es zählen nur Subklassen von October\Rain\Database\Model. Alles andere ergibt 404.

php
Event::listen('renick.content.api.resolveHostTypes', fn () => [\Acme\Blog\Models\Post::class]);

renick.content.api.resolveContentFields ​

Entscheidet, ob das field der REST-Anfrage ein Content-Dokument-Feld ist. Eingebaut: document bei Geteilten Inhalten und contenteditor-Felder von Tailor-Einträgen. Jedes andere Feld ergibt 422.

php
Event::listen('renick.content.api.resolveContentFields', function ($host) {
    return $host instanceof \Acme\Blog\Models\Post ? 'content' : null;
});