Platzhalter und Hooks
WBCE bietet ein Platzhalter- und Hook-System mit dem Module und Templates auf interne Ereignisse reagieren können — ohne den Core zu verändern.
Was sind Hooks?
Hooks sind Einsprungpunkte im WBCE-Core an denen externe Code-Snippets ausgeführt werden können. Ein Modul kann sich in einen Hook einhängen und so auf Ereignisse reagieren.
Verfügbare Hooks
Frontend-Hooks
// Wird vor der Seitenausgabe ausgeführt
define('BEFORE_PAGE_CONTENT', true);
// Wird nach der Seitenausgabe ausgeführt
define('AFTER_PAGE_CONTENT', true);
Backend-Hooks
// Wird beim Anlegen einer neuen Seite ausgeführt
// Datei: modules/mein_modul/add.php
// Wird beim Löschen einer Seite ausgeführt
// Datei: modules/mein_modul/delete.php
Outputfilter (OPF)
Der mächtigste Mechanismus in WBCE. Outputfilter können die komplette HTML-Ausgabe bearbeiten bevor sie an den Browser gesendet wird.
Filter registrieren:
opf_register_filter('mein_filter', 'meine_callback_funktion', 'frontend', 50);
Parameter:
Name: Eindeutiger Name des Filters
Callback: PHP-Funktion die aufgerufen wird
Typ: frontend / backend / both
Position: Reihenfolge (niedrig = früher)
Callback-Funktion:
function meine_callback_funktion($content) {
// $content = kompletter HTML-Output der Seite
// Verändern und zurückgeben:
$content = str_replace('alt', 'neu', $content);
return $content;
}
Droplets als Hooks
Droplets sind die einfachste Form von Hooks — wiederverwendbare PHP-Schnipsel die direkt in Seiteninhalte eingefügt werden.
Im Content aufrufen:
Droplet-Datei (/modules/droplets/droplets/MeinDroplet.php):
<?php
// Parameter auslesen
$param = isset($param) ? $param : 'standard';
// Ausgabe zurückgeben
return '<p>Hallo ' . htmlspecialchars($param) . '!</p>';
Insert-Klasse
Die Insert-Klasse ermöglicht es CSS und JavaScript aus Modulen heraus gezielt in den <head> oder vor </body> einzufügen.
// CSS einfügen:
insertCssFile(WB_URL . '/modules/mein_modul/css/style.css');
// JavaScript einfügen:
insertJsFile(WB_URL . '/modules/mein_modul/js/script.js');
// Inline-Code einfügen:
insertCssCode('.meine-klasse { color: red; }');
insertJsCode('console.log("geladen");');
Praxisbeispiel: Modul fügt CSS hinzu
In view.php:
<?php
defined('WB_PATH') or die("This file cannot be accessed directly!");
// CSS nur einmal laden (auch bei mehreren Abschnitten)
if (!defined('MEIN_MODUL_CSS_LOADED')) {
define('MEIN_MODUL_CSS_LOADED', true);
insertCssFile(WB_URL . '/modules/mein_modul/css/frontend.css');
}
// Inhalt ausgeben...