Hilfe:Parserfunktionen/Kontrollstrukturen
Diese Hilfeseite erläutert spezielle Parserfunktionen, mit denen sich in der Programmierung von Vorlagen Kontrollstrukturen realisieren lassen; also von Bedingungen abhängige wenn – dann – sonst.
Alle Parameter und Ergebnisse werden „getrimmt“; führende oder schließende einfache Leerzeichen oder Zeilenumbrüche werden ignoriert.
Einfache Verzweigung – #if
Funktion | Pflichtparameter | Parameter | |
---|---|---|---|
#if
|
Bedingung | WennWahr | WennFalsch |
Ergebnis in Abhängigkeit von einer Bedingung.
| |||
Beispiele:
|
Anmerkungen:
- Oft ist es sinnvoll, auch nicht-leere Werte wie
0
,nein
,-
oderfalse
als „falsch“ aufzufassen. Hierfür gibt es faculty@TemplUtl. - Die effizienteste Methode zum Trimmen eines Parameterwertes ist:
{{#if: trim | {{{1}}} }}
– Die „Bedingung“ ist immer „wahr“; damit wird WennWahr zum Resultat, und das ist immer getrimmt. Der Hinweistrim
soll den Sinn dieses sinnlosen Konstrukts verdeutlichen.
Wenn gleich – #ifeq
Funktion | Pflichtparameter | Parameter | ||
---|---|---|---|---|
#ifeq
|
Vergleichswert1 | Vergleichswert2 | WennGleich | WennUngleich |
Ergebnis in Abhängigkeit des Vergleichs zweier Zeichenketten.
| ||||
Beispiel: {{#ifeq: {{{Parole}}} | Emil | Clique | fremd}} → Wenn der Vorlagenparameter {{{Parole}}} den Wert Emil hat, dann ist das Ergebmis Clique , ansonsten fremd .
|
Mehrfache Verzweigung – #switch
Funktion | Pflichtparameter | Parameter | Pflichtparameter | Parameter | |||
---|---|---|---|---|---|---|---|
#switch:
|
Vergleichswert | Werte | Wert= Ergebnis
|
Werte | Wert= Ergebnis
|
… | SonstErgebnis |
Ergebnis in Abhängigkeit von einem Vergleichswert.
| |||||||
Beispiel:
{{#switch: {{{Zeichen}}}
|A|B|C|D| … X|Y|Z=Großbuchstabe
|a|b|c|d| … x|y|z=Kleinbuchstabe
|=Leerzeichen
|,|;|.|!|?=Satzzeichen
|{{{Zeichen}}}=KEIN ZEICHEN ANGEGEBEN
|#default=Sonderzeichen
}}
In Abhängigkeit vom Vorlagenparameter |
Wenn Fehler – #iferror
Es wird analysiert, ob in einem Wikitext eine Fehlermeldung vorliegt.
Eine Fehlermeldung wird erkannt:
- an bestimmten HTML-Tags, namentlich
<div>
<span>
<p>
<strong>
, - die eine Klassenzuweisung
class="error"
enthalten müssen, - wobei
error
mit doppelten Anführungszeichen"
und nicht mit'
(oder ohne) angegeben sein muss, - jedoch weitere durch Leerzeichen abgetrennte Klassenbezeichner im Attributwert vorkommen dürfen.
Solche Fehlermeldungen können in jeder Vorlage generiert werden; viele Elemente der Wiki-Software erzeugen sie ebenfalls.
Funktion | Pflichtparameter | Parameter | |
---|---|---|---|
#iferror
|
Wikitext | WennFehler | WennProblemlos |
Ergebnis in Abhängigkeit von der Existenz einer Fehlermeldung.
Es ergeben sich drei Möglichkeiten in Abhängigkeit davon, ob auch WennFehler und WennProblemlos angegeben wurden.
| |||
Beispiele:
|
Wenn existiert – #ifexist
Funktion | Pflichtparameter | Parameter | ||
---|---|---|---|---|
#ifexist
|
Seitenname | WennExistiert | WennNicht | |
Ergebnis in Abhängigkeit von der Existenz einer Seite im lokalen Projekt.
| ||||
Beispiele: |
Der Seitenname wird im Gesamtprojekt wie eine Verlinkung registriert.
- Das hat den Grund, dass zu erwarten ist, dass sich das Ergebnis der Programmierung signifikant verändern soll, wenn eine existierende Seite gelöscht wird, oder aber eine bisher nicht existierende Seite neu angelegt wird.
- Damit wird die diese Konstruktion enthaltende Seite so behandelt, als ob sich eine eingebundene Vorlage verändert hätte: Die im Cache hinterlegte Präsentation wird als ungültig entfernt, und spätestens mit dem nächsten Abruf der Seite unter geänderten Bedingungen neu produziert.
- Anhand der Datenbank-Tabelle Links auf diese Seite weiß der Server, welche Seiten, ihre Inhalte oder Existenz Auswirkungen auf die Darstellung anderer Seiten haben; etwa auch ob Wikilinks in rot oder blau darzustellen sind. Gemäß der Einträge in der Datenbank-Tabelle werden die beeinflussten Seiten neu aufgebaut.
- Es gibt mit phab:T14019 von 2007 Überlegungen aus 2022, in den Tabellen von WhatLinksHere die Abfragen nach Seitenexistenz in einer vierten Spalte gesondert auszuweisen, statt sie gemeinsam mit den Verlinkungen zu verbuchen. Das betriffft jedoch nur die bisherige Aufschlüsselung nach Verlinkung – Seiteneinbindung – Weiterleitung. Änderungen des Status bedürfen auch dann einer Neugenerierung des Gesamtinhalts unter den aktuellen Bedingungen.
- Um die Existenz einer Datei abzufragen, muss man dem Dateinamen den Namensraum "Medium" voranstellen und nicht "Datei". Beispiel Datei:Commons-logo.svg:
{{#ifexist: Medium:Commons-logo.svg|...
#ifexist
gehört zu den „teuren“ Funktionen, von denen pro dargestellter Seite gemäß Vorlagenbeschränkungen insgesamt nur 500 erlaubt sind.
Wenn Ausdruck – #ifexpr
Funktion | Pflichtparameter | Parameter | |
---|---|---|---|
#ifexpr
|
Ausdruck | WennWahr | WennFalsch |
Ergebnis in Abhängigkeit von einem berechneten Ausdruck.
| |||
Beispiele:
|
Und-/Oder-Verknüpfungen
Wenn bei einer der Verknüpfungsvorlagen (Vorlage:Booland, Vorlage:Boolor usw.) die Parameter übergeben werden, dann müssen zunächst ausnahmslos alle Parameterwerte vollständig ausgewertet worden sein, bevor dann die Verknüpfungsvorlage mit all diesen Parameterwerten eingebunden werden kann.
- Das kann zum Problem werden; insbesondere wenn dadurch „teure“ oder sonst performancekritische Auswertungen erforderlich sind.
Intelligenter ist immer der folgende Weg:
- Und:
- Eine Bedingung wird ausgewertet, falls erfolgreich dann die nächste, wenn auch diese erfolgreich dann die nächste usw. Sobald eine Bedingung nicht erfüllt ist, erfolgen auch keine Auswertungen mehr.
- Beispiel:
{{#if: {{A-Vorlage}} | {{#if: {{B-Vorlage}} | <Aktion> }} }}
- Oder:
- Eine Bedingung wird ausgewertet, falls nicht erfolgreich dann die nächste, falls nicht erfolgreich dann die nächste usw. Sobald eine Bedingung erfüllt ist, erfolgen auch keine Auswertungen mehr.
- Es kann ein boolescher Wert
1
für den Erfolgsfall gebildet werden, und das gesamte Oder-Konstrukt liefert danach den Wert1
oder leer. Dieses Resultat kann dann zur Auswertung der gemeinschaftlichen Ziel-Aktion herangezogen werden. - Beispiel:
{{#if: {{#if: {{A-Vorlage}} | 1 | {{#if: {{B-Vorlage}} | 1 }} }} | <Aktion> }}
Geschichte
Mitte April 2006 wurden (zusammen mit anderen in der Erweiterung für Parserfunktionen) die Kontrollstrukturen verfügbar gemacht. Erst dadurch wurde auch eine Vorlagenprogrammierung im eigentlichen Sinn möglich, während bis dahin nur stumpf Parameterwerte formatiert wurden. Die allerersten Vorlagen hatten noch nicht einmal Parameter gehabt und hießen schlicht „Bausteine“; sie lieferten immer den gleichen Text.