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' );