Hooks
Beginnend mit Version 3.5 verfügt Virthos über einen Hook-Mechanismus, mit dem
sich das Standardverhalten beeinflussen lässt. Sie können diesen Mechanismus
nutzen, indem Sie eine PHP-Datei mit entsprechenden Definitionen und Aufrufen
erstellen und diese Datei mit Hilfe des Konfigurationsparameters includeFile
in Virthos einbinden.
Das Definieren eines Hooks geschieht mit Hilfe der Funktion register_hook
,
die als ersten Parameter den Namen eines "Events" und als zweiten Parameter den
Namen einer Callback-Funktion übergeben bekommt, die bei Eintreten des Events
aufgerufen wird (siehe Beispiel weiter unten).
Verfügbare Events
before_compiling
Dieser Event wird ausgelöst, nachdem die Virthos-Umgebung initialisiert und die
Methodendatei (Template) geladen wurde. Über die globale Variable
$vtMethod['code']
kann man auf den unkompilierten VirthosTalk-Code des
Templates bzw. der Methode zugreifen und diesen ggf. verändern.
before_evaluation
Dieser Event wird ausgelöst, nachdem der VirthosTalk-Code kompiliert wurde und
alle VirthosTalk-Platzhalter durch entsprechenden PHP-Code ersetzt wurden. Auf
den finalen Code kann man wiederum über die globale Variable $vtMethod['code']
zugreifen.
before_output
Dieser Event wird ausgelöst, nachdem der finale Code evaluiert, sprich: ausgeführt
wurde. Das Ergebnis, das zur Auslieferung an den Webbrowser bzw. HTML-Client
bereitsteht, lässt sich über die PHP-Funktion ob_get_contents()
auslesen. Um es
zu verändern, muss der Output-Buffer mittels ob_clean()
geleert und dann das neue
Ergebnis mittels echo
- oder print
-Befehl ausgegeben werden.
get_methods
Dieser Event wird ausgelöst, wenn ein Benutzer eine Liste aller Methoden angefordert
hat (z. B. durch Klicken auf den Zahnradbutton im Redaktionssystem) und diese Liste
fertig zusammengestellt wurde. Die Callback-Funktion bekommt als Parameter ein Array
übergeben, das eine Liste von Methodenobjekten mit den Attributen name
und title
enthält. Als Rückgabewert wird wiederum eine solche Liste erwartet.
get_method_directories
Dieser Event wird ausgelöst, nachdem Virthos eine Liste der Verzeichnisse
zusammengestellt hat, in denen nach Methodendateien bzw. Templates gesucht wird.
Die Callback-Funktion bekommt als Parameter ein Array übergeben, das eine Liste von
Verzeichnispfaden enthält. Als Rückgabewert wird eine ebensolche Liste erwartet.
Durch diesen Hook ist es möglich, eigene Methodendateien bzw. Templates zur
Verfügung zu stellen, ohne für jede einzelne Datei einen get_method_xxx
-Hook
definieren zu müssen.
get_method_xxx
Dieser Event wird ausgelöst, nachdem eine Liste der Dateipfade zusammengestellt
wurde, die als Quelle für die Methode xxx
in Frage kommen und von denen die
erste existierende Datei als Methodendatei verwendet wird. Die
Callback-Funktion bekommt als Parameter ein Array übergeben, das die Liste der
Dateipfade enthält. Als Rückgabewert wird eine ebensolche Liste erwartet.
Beispiel
Mit Hilfe des folgenden Codes werden zwei neue Methoden special1
und special2
bereitgestellt. Die zugehörigen Template-Dateien müssen im Verzeichnis
./config/my_methods
abgelegt sein.
function my_special_methods( $methods ){
array_unshift( $methods,
[ 'name' => 'special1', 'title' => 'My special method 1' ],
[ 'name' => 'special2', 'title' => 'My special method 2' ]
);
return $methods;
}
function my_method_directories( $directories ){
return array_unshift( $directories,
v::vtconfig('pathToVirthos') . 'config/my_methods' );
}
register_hook( 'get_methods', 'my_special_methods' );
register_hook( 'get_method_directories', 'my_method_directories' );