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.
| Event | Argumente | Listener |
|---|---|---|
renick.content.registerBlocks | BlockManager | gibt Block-Konfigurationen zurück, siehe Blöcke erstellen |
renick.content.registerIntegrations | keine | gibt 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_id | erhä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.resolveHostTypes | keine | gibt Host-Model-Klassen für REST und Bundle-Befehle zurück |
renick.content.api.resolveContentFields | $host | gibt 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.
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.
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.
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.
Event::listen('renick.content.api.resolveContentFields', function ($host) {
return $host instanceof \Acme\Blog\Models\Post ? 'content' : null;
});