# vBulletin 4 Template-Syntax

vBulletin 4.0 führt eine neue Syntax zur Nutzung in den Templates ein, die die Notwendigkeit des Escapens von Strings und Erstellen von Formatierungen direkt in den PHP-Dateien reduziert.

Hinweis: Sobald in einem Template irgendein Ausdruck der neuen Syntax verwendet wird, werden alle alten Variablen und Bedingungen in diesem Template nicht mehr funktionieren. Es müssten in dem Fall also alle Variablen und Bedingungen in die neue Syntax umgewandelt werden.

- Zugriff auf Variablen
  - Sichere Variablen
  - Nicht sichere Variablen
- Syntax mit geschweiften Klammern
  - Integrierte Methoden
    - phrase
    - rawphrase
    - date
    - time
    - number
    - raw
    - escapejs
    - urlencode
    - if
    - link
    - math
    - stylevar
- Syntax mit spitzen Klammern (Tags)
  - literal
  - if
  - elseif
  - else
  - comment
  - each

- Beispiel für vb:each

## Zugriff auf Variablen

### Sichere Variablen

Wenn möglich, sollte auf Variablen grundsätzlich mit der folgenden Syntax zugegriffen werden:

    {vb:var variable}

Bei der Verwendung dieser Syntax wird der Inhalt der Variablen bei der Ausgabe mittels der PHP-Funktion htmlspecialchars 'sicher gemacht'.

Um auf Elemente eines Arrays zugreifen zu können, benutzen Sie den Punktoperator und nicht die php-üblichen eckigen Klammern:

    {vb:var variable.foo} // gibt htmlspecialchars($variable['foo']) aus
    {vb:var variable.$varkey} // gibt htmlspecialchars($variable[$varkey]) aus

### Nicht sichere Variablen

Um auf den rohen, unveränderten Inhalt einer Variablen zuzugreifen, benutzen Sie diese Syntax:

`{vb:raw variable}`

Diese Art der Nutzung entspricht dem Zugriff auf `$variable` in vBulletin 3.x Templates. Die Variable wird in keinster Weise behandelt. Mit dem Punktoperator kann ebenfalls auf Elemente eines Arrays zugegriffen werden.

## Syntax mit geschweiften Klammern

Die allgemeine Syntax ist:

    {vb:methode arg1[, arg2...]}

Um den Variablennamen müssen keine weiteren geschweiften Klammern gesetzt werden. Beispiel:

    {vb:methode {variable}} // unnötige Klammern
    {vb:method variable}

### Integrierte Methoden

phrase
  `{vb:phrase phrase_name[, Argumente für die Phrase...]}`
  Gibt die angegebene Phrase aus. Vorhandene Argumente werden mit htmlspecialchars behandelt.
rawphrase
  `{vb:rawphrase phrase_name[, Argumente für die Phrase...]}`
  Wie oben, allerdings ohne Behandlung der Argumente durch htmlspecialchars.
  Beispiel:
  `{vb:rawphrase message_by_x_on_y_at_z, {vb:link member, {vb:raw postinfo}}, {vb:raw postinfo.username}, {vb:raw postinfo.postdate}, {vb:raw postinfo.posttime}}`
date
  `{vb:date timestamp[, format]}`
  Formatiert ein Datum anhand eines UNIX Timestamps mit der Standardformatierung der aktuellen Sprache. Es kann auch ein eigenes Format explizit angegeben werden. Die Zeitzone wird für den Benutzer angepasst.
time
  `{vb:time timestamp[, format]}`
  Formatiert eine Zeitangabe anhand eines UNIX Timestamps mit der Standardformatierung der aktuellen Sprache. Es kann auch ein eigenes Format explizit angegeben werden. Die Zeitzone wird für den Benutzer angepasst.
number
  `{vb:number number[, decimals]}`
  Gibt eine Zahl aus, die mittels vb_number_format für die jeweilige Sprache formatiert wird. Die Anzahl der Nachkommastellen kann angegeben werden.
raw
  `{vb:raw variable}`
  Gibt den Inhalt der Variable ohne Formatierung oder anderer Behandlung aus.
escapejs
  `{vb:escapejs variable}`
  Gibt die Variable so aus, dass sie in einem mit Hochkommata eingeschlossene Javascript-String genutzt werden kann. htmlspecialchars wird nicht benutzt.
urlencode
  `{vb:urlencode variable}`
  Behandelt die Variable mit urlencode.
if
  `{vb:if condition, true[, false]}`
  Diese Art der Template-Bedingung kann benutzt werden, wenn die normale Variante <vb:if> nicht möglich ist, z.B. innerhalb von HTML-Tags.
link
  `{vb:link type, info[, extra-info]}`
  Erstellt einen Link des angegebenen Typs und wandelt ihn in das verwendete 'suchmaschinenfreundliche' Format um.
math
  `{vb:math expression}`
  Primär in CSS benutzt, um den angegebenen mathematischen Ausdruck auszuwerten.
stylevar
  `{vb:stylevar name[.sub-part]}`
  Ausgabe einer Stylevariablen aus dem Stylesystem. Es wird kein Escaping durchgeführt.

## Syntax mit spitzen Klammern (Tags)

Alle Tags benutzen den vb Namespace, um sie leichter erkennen und parsen zu können.

Die folgenden Tags sind verfügbar:

literal
  `<vb:literal>diverser code</vb:literal>`
  Der gesamte Code in einem `vb:literal` Tag wird als reines HTML behandelt. Ausdrücke mit geschweiften Klammern oder vb:tag werden nicht ausgewertet.
if
  `<vb:if condition="bedingung">ausgabe wenn wahr</vb:if>`
  Wenn die bedingung wahr ist, wird der Inhalt des `vb:if` Tags ausgegeben. Andernfalls erfolgt keine Ausgabe.
elseif
  `<vb:elseif condition="bedingung" />ausgabe wenn wahr`
  Kann im Zusammenhang mit `vb:if` benutzt werden, um weitere Bedingungen auszuwerten. Wenn die bedingung wahr ist, wird der Inhalt des `vb:elseif` Tags ausgegeben. Andernfalls erfolgt keine Ausgabe.
else
  `<vb:else />ausgabe wenn falsch`
  Kann im Zusammenhang mit `vb:if` benutzt werden, um ausgabe wenn falsch auszugeben, wenn die Bedingungen von `vb:if` oder `vb:elseif` nicht wahr sind.
comment
  `<vb:comment>ein kommentar</vb:comment>`
  In Fällen, in denen in einem Template ein Kommentar stehen muss, der aber nicht im Quelltext der Seite zu sehen sein soll, kann das `vb:comment` Tag benutzt werden.
each
  `<vb:each from="array" key="key" value="value"></vb:each>`
  Mit diesem Tag kann über ein Array iteriert werden, wie mit der PHP-Funktion foreach.

### Beispiel für vb:each

    // Array mit Benutzerdaten:
    // $users = array(
    //	1 => array('username' => 'Michael', 'email' => 'michael@michael.xy'),
    //	2 => array('username' => 'Scott', 'email' => 'scott@scott.xy'),
    //	3 => array('username' => 'Stephan', 'email' => 'stephan@stephan.xy')
    // );

    <!-- der template code... -->
    <vb:each from="users" key="userid" value="userinfo">
    	<li><a href="member.php?u={vb:var userid}">{vb:var userinfo.username}</a></li>
    </vb:each>

    <!-- ...erzeugt die ausgabe -->
    	<li><a href="member.php?u=1">Michael</a></li>
    	<li><a href="member.php?u=2">Scott</a></li>
    	<li><a href="member.php?u=3">Stephan</a></li>