WebTML-Scriptlets sind dynamische Bestandteile eines Textes die während seiner Ausgabe über WebTML berechnet werden. Scriptlets können beispielsweise in Items von Inhaltsdokumenten eingebettet werden um dort dynamische Informationen ausgeben zu können.
So kann ein Scriptlet in den Text eines Items eingebettet werden:
Dies ist ein Link auf das Home-Dokument: {@(name:home)!link@}Dieses Scriptlet wird bei der Ausgabe des Items über den Tag <tml:item> durch einen dynamisch berechneten Link ersetzt:
Dies ist ein Link auf das Home Dokument: <a href="URL zum Home-Dokument">Home-Dokument</a>
Scriptlets werden bei jeder Ausgabe des Textes, der sie enthält, neu und in Bezug auf den aktuell gültigen Kontext berechnet. Ihre Nutzungsweise entspricht weitestgehend der Nutzung normaler WebTML-Tags in WebTML-Modulen, nur dass sie stattdessen in beliebigen Texten eingebettet werden können, so auch in Items die Bestandteil der Webinhalte und damit der Content-Datenbank sind.
Die Grundsyntax von WebTML-Scriptlets ist:
{@funktion@}
Bei Bedarf kann jedem WebTML-Scriptlet ein Kontextausdruck übergeben werden, in dessen Kontext die Scriptlet-Funktion ausgeführt werden soll:
{@(kontextausdruck)funktion@}
Die Syntax für Kontextausdrücke entspricht der Syntax des Attributes
context. Der Ausgangskontext ist dabei der Kontext des Tags, über welchen der Text gerade ausgegeben wird.
Ist ein Scriptlet der einzige Inhalt einer
Textzeile, und wird unmittelbar von HTML-Umbrüchen umgeben, so werden
diese Umbrüche bei der Ausgabe entfernt. Dies geschieht damit Umbrüche,
die nur zur besseren Übersicht der verwendeten Scriptlets in den Code
eingebettet wurden, nicht das Layout der Seite beeinflussen.
Die Berechnung von Scriptlets ist normalerweise nicht aktiviert. Es gibt zwei Ordnungen von Scriptlets die sich im Umfang ihrer
Funktionalitäten unterscheiden und deren Unterstützung auf
unterschiedliche Weise aktiviert wird.
Scriptlets der ersten Ordnung bieten Basisfunktionen wie den Abruf von Dokument-Daten und die Ausführung so genannter "Scriptlet-Makros", Funktionen die entweder durch WGA oder das
aktuelle Design vordefiniert sind.
Sie werden aktiviert wenn:
- An einem Tag <tml:item> der Richtext-Editor verwendet wird (Attribut editor="rtf"). Der Richtext-Editor benutzt für einige seiner Funktionen selbst Scriptlets.
- An einem beliebigen WebTML-Tag das Attribut encode auf "rtf" gesetzt wird.
Scriptlets, welche sich in der Ausgabe dieser Tags befinden werden dadurch automatisch ausgeführt.
Scriptlets der ersten Ordnung bestehen aus drei Typen mit unterschiedlichen Syntaxen:
Abruf von Items:
{@#itemname@}
Abruf von Metadaten-Feldern:
{@$metaname@}
Aufrufen von "Scriptlet-Macros":
{@!macroname [:parameter, parameter, ...]@}
Die vordefinierten Scriptlets der ersten Ordnung sind in der Referenz dokumentiert:
WebTML-Scriptlets der ersten Ordnung
Scriptlets der zweiten Ordnung beinhalten alle Funktionen der ersten Ordnung, ermöglichen aber darüber hinaus die Ausführung beliebigen TMLScript-Codes im aktuellen Kontext.
Scriptlets der zweiten Ordnung können für Ausgaben des Tags <tml:
item> aktiviert werden indem das Attribut
scriptlets auf "true" gesetzt wird.
Folgende Syntaxen stehen zur Verfügung
{@= TMLScript-Ausdruck @}Ausführung eines beliebigen TMLScript-Ausdrucks dessen Ergebnis ausgegeben wird.
{@ TMLScript-Code @}Ausführung beliebigen TMLScript-Codes, inklusive Steueranweisungen. Wird per "return"-Anweisung ein Ergebnis zurückgegeben so wird dieses ausgegeben.
Scriptlets der zweiten Ordnung geben WGA-Autoren Zugriff auf den gesamten Funktionsumfang von TMLScript, also auf mächtige und potentiell gefährliche Funktionen die normalerweise nur Personen mit Designer-Zugriff auf die Datenbank besitzen. Daher können sie ein Sicherheitsrisiko darstellen und sollten nur mit Bedacht aktiviert werden.
Seit WGA 4.0.4 besteht die Möglichkeit den "Scriptlet-Sprachschatz" durch benutzerdefinierte Scriptlet-Makros zu erweitern. Ein benutzerdefiniertes Scriptlet wird als TMLScript-Modul im Datenbank-Design angelegt. Das Modul muss folgende Voraussetzungen erfüllen:
- Sein Name muss mit "scriptlets:" beginnen (bzw. in einem WGA-Designverzeichnis muss die Moduldatei in einem Ordner "scriptlets" unterhalb des Ordners "scripts/tmlscript" abgelegt werden).
- Der Name hinter ":scriptlets" darf nicht dem Namen eines vordefinierten Scriptlet-Makros entsprechen, wie z.B. "scriptlets:div"
Definieren sie im Code des TMLScript-Moduls den TMLScript-Code der berechnet werden soll wenn das Scriptlet ausgeführt wird. Per "return"-Anweisung geben sie das Ergebnis des Scriptlets aus. Legen sie beispielsweise ein TMLScript-Modul "scriptlets:home" an welches einen Link auf das Home-Dokument ihrer Website berechnet:
return '<a href="' + context("name:home").contenturl(null, null) + '">Home</a>';
Das Scriptlet ist sofort bei Speicherung des Moduls verfügbar. Um es zu benutzen verwenden sie die Scriptlet-Makro-Syntax, geben jedoch den Namen ihres TMLScript-Moduls ohne "scriptlets:"-Präfix an, z.B.
Hier geht es zum Home-Dokument: {@!home@}Ihr Scriptlet kann auch Parameter in der für Scriptlet-Makros üblichen Form empfangen. Diese sind im Scriptlet als WebTML-Variablen "tmlparam1" bis "tmlparam5" verfügbar. Das folgende Beispiel erzeugt einen HTML-Link zu einem Dateianhang, der in einem separaten Browserfenster geöffnet wird. Die Informationen zu Dokument, Anhangname und Linktitel werden als Parameter übergeben:
return '<a target="_blank" href="' + fileurl(tmlparam1, tmlparam2) + '">' + tmlparam3 + '</a>'
Folgendermaßen wird dieses Scriptlet, welches als TMLScript-Modul "scriptlets:newwinlink" gespeichert wurde, im Rich-Text-Editor benutzt:
Link zur {@!newwinlink: instructions, install.pdf, Installations-Anleitung@}Da benutzerdefinierte Scriptlets auf TMLScript-Code beruhen ist es damit theoretisch möglich, dem Autor auf diesem Weg gefährliche Funktionalitäten offenzulegen, welche die Integrität der Daten und des WGA-Servers gefährden können. Daher sollte Scriptlet-Code mit Bedacht gewählt werden. auf datenmodifizierende Funktionen in Scriptlet-Code sollte verzichtet werden.