Suche:
Virthos-Onlinedokumentation > >   

Eigenen PHP-Code einbinden

Mit vtCalc steht in allen Virthos-Versionen eine Möglichkeit zur Verfügung, um eigenen PHP-Code in Templates einzubinden. Diese Möglichkeit ist allerdings auf einfache PHP-Ausdrücke beschränkt, komplexere Anweisungen oder gar Anweisungsblöcke lassen sich mit vtCalc nicht verwirklichen. Virthos Master stellt daher eine zusätzliche VirthosTalk-Anweisung zur Verfügung, um PHP-Code in Templates einzubinden, und zwar beliebigen Code, ohne jegliche Einschränkungen. Ein einfaches Beispiel sieht so aus:

<!--{{vtCode: echo "Hello World!"; }}-->

Man notiert einfach hinter dem Doppelpunkt den gewünschten PHP-Code, so wie man ihn auch in einem PHP-Skript schreiben würde. Beachten muss man dabei nur, dass innerhalb des Codes nicht zwei schließende geschweifte Klammern unmittelbar aufeinanderfolgen, denn dies würde vom Virthos-Parser als das Ende der vtCode-Anweisung interpretiert. Es genügt, wenn ein Leerzeichen oder ein Zeilenumbruch zwischen den geschweiften Klammern steht.

Innerhalb von vtCode sind beliebige PHP-Anweisungsblöcke erlaubt, die sich auch über mehrere Zeilen erstrecken dürfen:

<!--{{vtCode: 
    for( $i=1; $i<10; $i++ ) {
        echo "Hello World!"; 
    }
}}-->

Bevor man PHP-Code in ein Virthos-Template einbindet, empfiehlt es sich, ihn innerhalb eines herkömmlichen PHP-Skripts zu testen. Virthos gibt bei eingebundenem PHP-Code nämlich keinerlei Fehler- oder Warnmeldungen aus, was die Fehlersuche schwierig gestaltet. In jedem Fall ist es wichtig zu beachten, dass auch eine einzelne PHP-Anweisung in vtCode mit einem Semikolon abgeschlossen werden muss.

Da vtCode beliebige PHP-Anweisungen erlaubt, ist es nicht möglich (wie in vtCalc), dass man Virthos-Platzhalter einfach in den Code einsetzt. Das folgende Beispiel macht den Unterschied deutlich:

<!--{{vtCalc: substr('{Headline}', 0, 3); }}-->
{{vtResult}}

Diese Anweisung würde die ersten drei Zeichen ausgeben, die im Feld "Headline" gespeichert sind, wogegen

<!--{{vtCode: echo substr('{Headline}', 0, 3); }}-->

stets "{He" ausgeben würde, unabhängig vom Inhalt des Headline-Feldes.

Um innerhalb des PHP-Codes auf Virthos-Daten zugreifen zu können, steht eine API in Form einer PHP-Klasse zur Verfügung, die in dem genannten Beispiel so verwendet werden könnte:

<!--{{vtCode: 
    $v = new virthos;
    echo substr( $v->vtpage('Headline'), 0, 3); }}-->
}}-->

Die Virthos-Klasse braucht innerhalb eines Templates nur einmal initialisiert zu werden. Neben der vtpage-Funktion, mit der sich seitenbezogene Inhalte ausgeben lassen, steht beispielsweise auch eine vtget-Funktion zur Verfügung, um auf Variablen zuzugreifen die zuvor mit der {{vtSet:...}}-Anweisung gesetzt wurden:

<!--{{vtSet: Name="{vtUser:name}" }}
<!--{{vtCode: $user = $v->vtget('Name'); }}-->

Umgekehrt lassen sich innerhalb von vtCode Variablen setzen, die außerhalb mit dem vtGet-Platzhalter ausgegeben werden können:

<!--{{vtCode: $v->vtset( array('Ergebnis'=>'okay') ); }}-->
{{vtGet:Ergebnis}}

Jede API-Funktion entspricht einem Platzhalter oder einer Anweisung des VirthosTalk-Sprachumfangs, sowohl in der Benennung als auch in der Struktur der Parameter. Wo in VirthosTalk nur ein einzelner Parameter vorgesehen ist, wird dieser als String übergeben, ansonsten erwartet die API-Funktion ein indiziertes oder assoziatives Array als Parameter. Eine Sonderstellung nimmt die bereits beschriebene Funktion vtpage() ein, für die es in VirthosTalk kein Gegenstück gibt.

Nicht alle VirthosTalk-Platzhalter und -Anweisungen stehen in der API zur Verfügung. Welche Funktionen verfügbar sind, können Sie der folgenden Tabelle entnehmen:

Funktion Beschreibung
vtpage( $str ) Gibt den Inhalt des seitenbezogenen Platzhalters $str aus. Seitenbezogen sind alle freien Platzhalter sowie die Platzhalter "vtComment", "vtCreationDate", "vtCreationUser", "vtID", "vtModificationDate", "vtModificationUser", "vtName", "vtPackage", "vtPageType" und "vtPathIDs".
vtget( $str ) Gibt den Wert der Variablen $str aus, die mittels vtSet-Anweisung gesetzt wurde.
vtsession( $str ) Gibt den Wert der Sessionvariablen $str aus, die mittels updateSession-Aktion gesetzt wurde.
vtglobal( $str ) Gibt den Wert der globalen Variablen $str aus.
vtdo( $action, $arr ) Führt die Inline-Aktion $action aus. Der zweite Parameter ist ein assoziatives Array mit den Parametern, die für die Aktion erforderlich sind.
vtset( $arr ) Setzt eine oder mehrere Variablen. Die Namen der Variablen entsprechen den Schlüsselnamen des assoziativen Arrays $arr, die Variablenwerte den Arraywerten.
vtlink( $arr ) Gibt eine URL aus, die auf eine andere Virthos-Seite verweist. Im Array $arr, das indiziert oder assoziativ sein kann, müssen die Parameter übergeben werden, die beim vtLink-Platzhalter dokumentiert sind.

PHP-Bibliotheken einbinden

Wollen Sie innerhalb von vtCode (oder vtCalc) auf Klassen und Funktionen zugreifen, die in externen Bibliotheken definiert sind, können Sie diese Bibliotheken mit Hilfe der vtLoad-Anweisung ins Template einbinden:

<!--{{vtLoad: classes/meine_funktionen.php }}-->

Dies entspricht der Anwendung eines include_once-Befehls in PHP. Beachten Sie, dass eine relative Pfadangabe bei vtLoad immer vom Speicherort der virthos.php-Datei aus aufgelöst wird und nicht, wie zum Beispiel bei vtInclude, von der Template-Datei aus.

< Eigene Datenbankabfragen 11.09.2008, 08:00 Uhr Seiteninhalte zwischenspeichern >