Hilfe:Vorlagenprogrammierung

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Hilfe > Bausteine > Vorlagenprogrammierung
Abkürzung: WP:VP

Seit Mitte April 2006 verfügt die Wiki-Syntax der MediaWiki-Software über verschiedene Konstrukte einer Programmiersprache für die Verwendung in Vorlagen. Voraussetzung ist die Extension ParserFunctions.

Die Sprachkonstrukte sollten ausschließlich im Vorlagen-Namensraum verwendet und wohlüberlegt eingesetzt werden. Nicht jede Spielerei, die möglich ist, ist auch sinnvoll. Programmierkonstrukte, die nicht ausreichend dokumentiert sind, werden wieder gelöscht.

Bei Problemen und Fragen zur Vorlagenprogrammierung hilft die Werkstatt des Wikiprojekts Vorlagen weiter.

Inhaltsverzeichnis

[Bearbeiten] Grundfunktionen

Auch die Grundfunktionalität der Mediawiki-Software – ohne die Extension ParserFunctions – bringt bereits einen Satz von Parserfunktionen mit sich. Diese werden separat unter Hilfe:Variablen#Funktionen beschrieben.

[Bearbeiten] Beschreibung der ParserFunctions

[Bearbeiten] Funktion if

Die if-Funktion ist ein Wenn-Dann-Sonst-Konstrukt. Die Syntax:

{{#if: <Bedingung> | <Dann-Text> | <Sonst-Text>}}

Enthält die <bedingung> Text, gilt sie als erfüllt und es wird <dann-text> zurückgegeben. Ist <bedingung> hingegen leer oder besteht ausschließlich aus Leerzeichen (whitespace), gilt sie als nicht erfüllt und es wird <sonst-text> zurückgegeben. <sonst-text> kann auch weggelassen werden, dann wird in diesem Fall nichts zurückgegeben.

Bei der Testbedingung ist auf folgendes zu achten: Wird zum Beispiel der Parameter {{{foo}}} referenziert und wurde dieser Parameter nicht angegeben, so hat der referenzierte Parameter den Wert „{{{foo}}}“ (die Wiki-Software löst den Parameter also nicht auf) und der Ausdruck ist immer richtig. Um dies zu verhindern, wird typischerweise {{{foo|}}} benutzt, also die Angabe eines leeren Default-Wertes. In diesem Fall hat der referenzierte Ausdruck den Wert "", enthält also keinen Text (womit die Bedingung nicht erfüllt ist und der "Sonst-Text" zur Anwendung gelangt). Dieses Verfahren erlaubt allerdings keine Unterscheidung mehr zwischen einem nicht angegebenen oder einem leer angegebenen Parameter.

Da Bedingungen sehr häufig in Tabellen und Infoboxen verwendet werden, noch ein weiterer Hinweis zur Tabellenverarbeitung: Um eine Tabellenzeile auszublenden, die etwa folgenden statischen Aufbau hat

...
|-
| Name || Wert
...

kann folgende Kodierung verwendet werden

...
|-
{{#if: {{{foo|}}} |
{{!}} Name {{!!}} Wert
}}
...

Dabei ist auf folgendes zu achten:

  • Innerhalb der if-Anweisung darf das |-Zeichen nicht anderweitig verwendet werden, weil es sonst fälschlicherweise als dann-text interpretiert werden würde. Daher muss das für die Tabelle notwendige |-Zeichen als {{!}} oder doppelt als {{!!}} kodiert werden.
  • Die Tabellensyntax erlaubt mehrere leere Zeilen hintereinander. Das heißt, es ist unproblematisch mehrere Zeilen mit |- (selbst mit Leerzeilen dazwischen) hintereinander zu kodieren.

Achtung: if unterstützt keine Gleichungen oder Ähnliches. Siehe dafür ifeq und ifexpr.

[Bearbeiten] Funktion ifeq

ifeq vergleicht zwei Zeichenketten und gibt je nach Ergebnis verschiedene Texte zurück.

{{#ifeq: <Text 1> | <Text 2> | <Text, wenn gleich> | <Text, wenn ungleich> }}

[Bearbeiten] Funktion ifexist

ifexist prüft, ob ein angegebenes Lemma existiert, und gibt je nachdem verschiedene Texte zurück.

{{#ifexist: <Lemma> | <Text, wenn Lemma existiert> | <Text, wenn Lemma nicht existiert> }}

Dabei darf die Gesamtzahl der ifexist auf einer Seite nicht die Grenze von 500 übersteigen, wobei es egal ist, ob sie eingebunden werden oder nicht. Weitere Einbindungen von ifexist werden stets so behandelt, als würde die angegebene Seite nicht existieren. Zusätzlich erscheint eine Warnung und die Seiten werden kategorisiert.

Die Überprüfung mittels #ifexist: erzeugt intern einen Link zum überprüften Lemma, dieser taucht dann in dessen Linkliste auf (Bug 12019). Bei Dateien mit Namensraum „Media“ wird eine Verwendung angezeigt. Diese Problematik kann nicht umgangen werden.

Interwiki-Links werden nicht geprüft. Es wird immer angenommen, dass Lemmata in anderen Wikis nicht existieren.

Die Parserfunktion prüft bei Bildern mit Namensraum „Datei“, „File“, „Bild“ oder „Image“ auf Existenz einer Dateibeschreibungsseite im lokalen Projekt, bei Angabe von „Media“ auf physikalische Existenz der Datei, auch über das lokale Projekt hinweg auf Commons.

Um bei einer Datei festzustellen, ob sie von Commons eingebunden wird, kann die Vorlage:IsCommons benutzt werden.

[Bearbeiten] Funktion expr

expr berechnet mathematische Ausdrücke.

{{ #expr: <ausdruck> }}
Mögliche Operationen
Operator Operation Beispiel
Algebraische Operationen
+ Addition {{#expr: 30 + 7 }} = 37
Subtraktion (oder Negation) {{#expr: 30 - 7 }} = 23
* Multiplikation {{#expr: 30 * 7 }} = 210
/ oder div Division {{#expr: 30 / 7 }} = 4.2857142857143
^ Potenz (ab). Achtung: Beim zweifachen Potenzieren sollten Klammern angegeben werden. Die Potenzen werden von der Software linksassoziativ ausgeführt: 2^2^2 = (2^2)^2. Mit der Beziehung \sqrt[n]{x} = x^{\frac{1}{n}} kann man auch radizieren. {{#expr: 2^8 }} = 256
mod Modulo, der Rest einer Division {{#expr: 30 mod 7 }} = 2
exp Exponentialfunktion (en) {{#expr: exp 5 }} = 148.41315910258
ln Der natürliche Logarithmus einer Zahl. Zur Umrechnung in andere Logarithmen siehe Basisumrechnung. {{#expr: ln exp 3 }} = 3
abs Betragsfunktion {{#expr: abs -1.2 }} = 1.2,
{{#expr: abs 1.2 }} = 1.2
Runden
round Rundet die Zahl auf der linken Seite auf die Anzahl Nachkommastellen, die von der Zahl auf der rechten Seite angegeben wird (kaufmännische Rundung) {{#expr: 30 / 7 round 7 }} = 4.2857143
trunc Rundet eine Zahl in Richtung Null auf die nächste Ganzzahl, d. h. negative Zahlen werden aufgerundet und positive Zahlen werden abgerundet {{#expr: trunc -1.2 }} = -1,
{{#expr: trunc 1.2 }} = 1
floor Abrunden auf die nächste Ganzzahl {{#expr: floor -1.2 }} = -2,
{{#expr: floor 1.2 }} = 1
ceil Aufrunden auf die nächste Ganzzahl {{#expr: ceil -1.2 }} = -1,
{{#expr: ceil 1.2 }} = 2
Konstanten und trigonometrische Operatoren
e Die Eulersche Zahl e {{#expr: e }} = 2.718281828459
pi Die Kreiszahl π {{#expr: pi }} = 3.1415926535898
sin Berechnet den Sinus einer Zahl in Bogenmaß {{#expr: sin 3.14 }} = 0.0015926529164868
cos Berechnet den Kosinus (engl. cosine) einer Zahl in Bogenmaß {{#expr: cos pi }} = -1
tan Berechnet den Tangens einer Zahl in Bogenmaß {{#expr: tan 1 }} = 1.5574077246549
asin Berechnet den Arkussinus {{#expr: asin 0.5 }} = 0.5235987755983
acos Berechnet den Arkuskosinus {{#expr: acos 0 }} = 1.5707963267949
atan Berechnet den Arkustangens {{#expr: atan 1.4 }} = 0.95054684081208
Vergleichsoperatoren
= Gleichheit {{#expr: 30 = 7 }} = 0
<> oder != Ungleichheit {{#expr: 30 <> 7 }} = 1
< Kleiner als {{#expr: 30 < 7 }} = 0
> Größer als {{#expr: 30 > 7 }} = 1
<= Kleiner oder gleich {{#expr: 30 <= 7 }} = 0
>= Größer oder gleich {{#expr: 30 >= 7 }} = 1
Logische Operatoren
and Logisches UND {{#expr: 30 and 7 }} = 1,
{{#expr: 30 and 0 }} = 0
or Logisches ODER {{#expr: 30 or 7 }} = 1,
{{#expr: 30 or 0 }} = 1
not Logisches NICHT {{#expr: not 7 }} = 0,
{{#expr: not 0 }} = 1
Syntax
#.#e±# Statt eines Kommas muss der Punkt zur Trennung der Nachkommastellen benutzt werden. Zahlengruppierungen (im deutschen meist der Punkt) sind nicht möglich. Zahlen können in der wissenschaftlichen Notation übergeben werden. Für positive Exponenten ist das Plus optional. {{#expr: 0.7e4 }} = 7000
( ) Gruppierung/Klammerung {{#expr: (30 + 7) * 7 }} = 259

Hyperbolische, andere trigonometrische, Arkus- und Areafunktionen müssen mit Hilfe der entsprechenden Definitionen und Umrechnungen realisiert werden:

Quelltext für Hyperbel- und Areafunktionen
Funktion Quelltext
Sinus Hyperbolicus (sinh) {{#expr: ((exp {{{x}}} - exp (-1*{{{x}}}))/ 2)}}
Kosinus Hyperbolicus (cosh) {{#expr: ((exp {{{x}}} + exp (-1*{{{x}}}))/ 2)}}
Tangens Hyperbolicus (cosh) {{#expr: ((exp {{{x}}} - exp (-1*{{{x}}})) / (exp {{{x}}} + exp(-1*{{{x}}}))) }}
Kotangens Hyperbolicus (coth) {{#expr: ((exp {{{x}}} + exp (-1*{{{x}}})) / (exp {{{x}}} - exp(-1*{{{x}}}))) }}
Sekans Hyperbolicus (sech) {{#expr: (2 / (exp {{{x}}} + exp (-1*{{{x}}}))) }}
Kosekans Hyperbolicus (sech) {{#expr: (2 / (exp {{{x}}} - exp (-1*{{{x}}}))) }}
Areasinus Hyperbolicus (arsinh) {{#expr: ln ({{{x}}} + (({{{x}}})*({{{x}}}) - 1)^0.5) }}
Areakosinus Hyperbolicus (arcosh) {{#expr: ln ({{{x}}} + (({{{x}}})*({{{x}}}) + 1)^0.5) }}
Areatangens Hyperbolicus (artanh) {{#expr: ln ((1+ {{{x}}})/(1- {{{x}}})) / 2 }}
Areakotangens Hyperbolicus (arcoth) {{#expr: ln (({{{x}}} +1)/({{{x}}} -1)) / 2 }}
Areasekans Hyperbolicus (arsech) {{#expr: ln ((1 + (1 - ({{{x}}})* {{{x}}})^0.5)/ {{{x}}}) }}
Areakosekans Hyperbolicus (arcsch) {{#expr: ln ((1 + (1 + ({{{x}}})* {{{x}}})^0.5)/ {{{x}}}) }}


Die booleschen Operatoren behandeln 0 (Null) als falsch und 1 als wahr. Zahlen werden mit dem Punkt als Dezimaltrenner angegeben.

Beispiel:

{{ #expr: (100 - 32) / 9 * 5 round 0 }}

ergibt:

38

Damit werden 100 Fahrenheit auf die Celsius-Skala umgerechnet (auf die nächste Ganze Zahl gerundet).

Da diese Berechnungen aus Kompatibilitätsgründen mit dem englischen Zahlenformat durchgeführt werden (Beispiel: {{ #expr: 13000 / 3.1 round 2 }} ergibt 4193.55) müssen solche Zahlen zusätzlich in das im deutschen Sprachraum übliche Format umgewandelt werden (Beispiel: {{ formatnum: {{ #expr: 13000 / 3.1 round 2 }} }} ergibt 4.193,55).

Arithmetische Ausdrücke können auf Spezial:Vorlagen_expandieren getestet werden.

[Bearbeiten] Funktion ifexpr

ifexpr wertet einen mathematischen Ausdruck aus.

{{#ifexpr: <ausdruck> | <dann-text> | <sonst-text> }}

Ist das Ergebnis von <ausdruck> 0 (Null), wird <sonst-text> zurückgegeben. Sonst wird <dann-text> zurückgegeben. <sonst-text> kann auch weggelassen werden, dann wird in diesem Fall nichts zurückgegeben.

Die Syntax für Ausdrücke wird in der Beschreibung von expr erklärt.

[Bearbeiten] Funktion iferror

iferror prüft, ob ein Fehler vorliegt, und gibt je nachdem verschiedene Texte zurück. Ein Fehler wird über die Klasse class="error" repräsentiert. Diese Klasse wird in den Elementen div, span, p und strong erkannt. Dies ist ein Fehler, wie er bei #expr, #ifexpr, #time oder #rel2abs auftreten kann. Es können so auch vom Benutzer selber Fehler erzeugt werden.

Das heißt: Wenn innerhalb des getesteten Ausdrucks ein Element wie z. B. <span class="error"> vorhanden ist, wird ein Fehler erkannt und der entsprechende Text zurückgegeben; ansonsten ein anderer Text.

Die Syntax:

{{#iferror: <Ausdruck> | <Text bei Fehler> | <Text bei keinem Fehler> }}

Die letzten beiden Parameter sind optional. Sofern kein Text bei keinem Fehler angegeben ist, wird Ausdruck zurückgegeben. Ist nur Ausdruck angegeben, wird bei einem Fehler nichts ausgegeben, sonst Ausdruck.

Beispiele:

{{#iferror: <Ausdruck> | <Text bei Fehler> | <Text bei keinem Fehler> }}

Bei einem Fehler im Ausdruck wird Text bei Fehler angezeigt, ansonsten wird Text bei keinem Fehler angezeigt.

{{#iferror: <Ausdruck> | <Text bei Fehler> }}

Bei einem Fehler im Ausdruck wird Text bei Fehler angezeigt, ansonsten der fehlerfreie Ausdruck.

{{#iferror: <Ausdruck> }}

Bei einem Fehler im Ausdruck wird nichts angezeigt, die Fehlermeldung wird unterdrückt.

{{#iferror: {{#expr: 1*{{{Para|}}}}} | Keine Zahl | Zahl }}

Ist {{{Para}}} eine Zahl (man kann also mit 1 multiplizieren) wird „Zahl“ ausgegeben, sonst „Keine Zahl“.

[Bearbeiten] Funktion switch

switch vergleicht einen Wert mit mehreren anderen. Die Grundsyntax ist:

{{#switch: <vergleichswert>
| <wert1> = <ergebnis1>
| <wert2> = <ergebnis2>
| ...
| <wertn> = <ergebnisn>
| #default = <standardergebnis>
}}

switch geht alle Werte durch, bis der Vergleichswert gefunden wird. Dann wird das entsprechende Ergebnis (hinter dem Gleichheitszeichen) zurückgegeben. Wenn kein Wert übereinstimmt, wird der Eintrag unter #default verwendet, sofern es diesen gibt. (Falls das Standardergebnis kein Gleichheitszeichen enthält, kann #default= auch weggelassen werden.)

„Rückfall“-Werte sind ebenfalls möglich:

{{#switch: <vergleichswert>
| <wert1>
| <wert2>
| <wert3> = <ergebnis1,2,3>
| ...
| <wertn> = <ergebnisn>
| #default = <standardergebnis>
}}

Hier wird für <wert1>, <wert2> und <wert3> derselbe Wert <ergebnis1,2,3> zurückgegeben.

[Bearbeiten] Funktion time

#time ist eine Funktion für die Zeitdarstellung, die mit der Koordinierten Weltzeit (UTC) arbeitet. Für die lokale Zeit kann die Funktion #timel angewandt werden.

Die Syntax ist

{{ #time: format }} für das Anzeigen eines aktuellen Zeitwerts, auch in verschiedenen Kalendersystemen. Für die Berechnung zukünftiger/vergangener Zeitpunkte, ausgehend vom jetzigen, gibt es den 2. Parameter:

{{ #time: format | time }}

Wenn time nicht angegeben wird, wird der Zeitpunkt der Umwandlung in HTML benutzt. Durch das Servercaching kann es dabei zu Abweichungen bei der Artikelanzeige bis zu einer Woche kommen. Eine manuelle Aktualisierung kann durch einen Purge erfolgen.

Seit MediaWiki 1.18 stehen folgende Optionen zur Verfügung:

{{#time:d F Y|1988-02-28|ja}} = Ausgabe auf Japanisch: 28 2月 1988

format

Von MediaWiki unterstützte format-Parameter sind: DjlNwzWFmMntLoYyaAgGhHiscrU (Erklärung der Codes auf php.net) sowie Erweiterungen zu PHP, diese werden in den folgenden zwei Tabellen erklärt. Die Ausgabe erfolgt entsprechend der lokalen Spracheinstellung; durch xn-Codes werden Zahlausgaben in Versalziffern umgewandelt, sofern das per lokaler Spracheinstellung erzeugten typografischen Varianten oder anderen Zahlensystemen benötigt wird.

format-Parameter
Code Beschreibung Ausgabe in UTC
Jahr
Y Jahr vierstellig 2012
y Jahr zweistellig 12
o Jahreszahl nach ISO 8601, gebunden an Kalenderwoche
29. Dezember 2008 = 2009, weil 1. KW; 2. Januar 2011 = 2010, weil 52. KW
2012
L Schaltjahr? 1=ja und 0=nein 1
Monat
M Monatsname abgekürzt Jan.
F Monatsname ausgeschrieben Januar
m Monat mit führender Null 01
n Monat ohne führende Null 1
t Gesamt-Anzahl der Tage in diesem Monat 31
Woche
W Kalenderwoche nach ISO-8601 04
Tag
z Tage seit Neujahr, 1. Januar=0; 2. Januar=1, … 22
j Tag im Monat ohne führende Null 23
d Tag im Monat mit führender Null 23
D Wochentag abgekürzt Mo
l Wochentag ausgeschrieben Montag
w Wochentags-Zähler, Mo(1)–Sa(6), So=0 1
N Wochentags-Zähler, Mo(1)–Sa(6), So=7 1
Stunde
H Stunde mit führender Null, Mitternacht = 00 08
G Stunde ohne führende Null, Mitternacht = 0 8
h Stunde im 12-h-Format mit führender Null, Mitternacht & Mittag = 12 08
g Stunde im 12-h-Format ohne führende Null, Mitternacht & Mittag = 12 8
a / A am und pm, klein- (a) bzw. großgeschrieben (A) am / AM
Minute und Sekunde
i Minute mit führender Null, volle Stunde = 00 57
s Sekunde mit führender Null, volle Minute = 00 57
Umfassende Zeitangabe
c Datum nach ISO 8601 2012-01-23T08:57:57+00:00
r Datum nach RFC 2822 Mon, 23 Jan 2012 08:57:57 +0000
U Unixzeit 1327309077

Erweiterungen zu PHP
Code Beschreibung Ausgabe in UTC
xn Sofern die Spracheinstellungen nicht Versalziffern erzeugen, sorgt xn dafür – beispielsweise ergibt {{ #time:G, xnG}} in Hindi → ८, 8 8 (xnG)
xr Formatiert den nächsten numerischen Code als römische Zahl. {{ #time: xrY }} → MMXII
xg Gibt die Genitivform des Monatsnamens aus; für Sprachen, die zwischen Genitiv und Nominativ unterscheiden. Januars
xx Der Buchstabe „x“ x

xmj
xmF
xmn
xmY

Tag nach islamischer Zeitrechnung
Monatsname nach islamischer Zeitrechnung
Monatszahl nach islamischer Zeitrechnung
Jahr nach islamischer Zeitrechnung

28

Safar
2
1433

xij
xiF
xin
xiY

Tag im iranischen Kalender
Monatsname im iranischen Kalender
Monatszahl im iranischen Kalender
Jahr im iranischen Kalender

3

Bahman
11
1390

xjj
xjt
xjF
xjx
xjn
xjY

Tag im jüdischen Kalender
Anzahl der Tage in einem Monat des jüdischen Kalenders
Monatsname im jüdischen Kalender
Monatsname im Genitiv im jüdischen Kalender
Monatszahl im jüdischen Kalender
Jahr im jüdischen Kalender

28

29
Tevet
Tevet
4
5772

xkY Jahr im thailändischen Sonnenkalender (Tag und Monat sind mit dem Gregorianischen Kalender identisch) 2555
xoY Jahr im chinesischen Minguo-Kalender (Tag und Monat sind mit dem Gregorianischen Kalender identisch) 101
xtY Jahr im japanischen Nengō-Kalender (Tag und Monat sind mit dem Gregorianischen Kalender identisch) 平成24

Jedes unbekannte Zeichen wird unbearbeitet zur Ausgabe durchgereicht. Dazu gibt es zwei Konventionen:

  • Zeichen "zwischen doppelten, hochgestellten Anführungszeichen" werden als solche ausgegeben, die Anführungszeichen selbst werden ausgespart. Dies verhindert eine Umwandlung der (Code-)Buchstaben eines Wortes. Anführungszeichen alleine werden als solche ausgegeben. Beispiele:
    • {{ #time: Wort}} → 042012Mon, 23 Jan 2012 08:57:57 +000031
    • {{ #time: "Wort"}} → Wort
    • {{ #time: "Wird übermorgen, einem" l "im" F", erledigt."|+ 2 days}} → Wird übermorgen, einem Mittwoch im Januar, erledigt.
    • {{ #time: "l, g:i:s a"}} → l, g:i:s a
  • backslash escapes werden unterstützt: \H ergibt das Zeichen H, \" ergibt das Zeichen "

time

Das Format des time-Parameters ist identisch mit der PHP-Funktion strtotime(). Relative Angaben wie zum Beispiel „+10 hours“ werden unterstützt, welche etwa für eine Zeitzonen-Berechnung genutzt werden können.

Beispiele
Code Beschreibung Ausgabe in UTC
mit verändertem Datum
{{ #time:j"."n"."Y H":"i":"s|2 days 10 hours 40 minutes ago}} Das angezeigte Datum wird um 2 Tage, 10 Stunden und 40 Minuten nach hinten verschoben 20.1.2012 22:17:57
{{ #time:j"."n"."Y H":"i":"s|yesterday}} Gestern 22.1.2012 00:00:00
{{ #time:j"."n"."Y H":"i":"s|tomorrow}} Morgen 24.1.2012 00:00:00
{{#time:j"."n"."Y H":"i":"s|2 days}} Übermorgen 25.1.2012 08:57:57
{{#time:j"."n"."Y H":"i":"s|2 years 2 months 2 weeks 2 days}} In 2 Jahren, 2 Monaten, 2 Wochen und 2 Tagen 8.4.2014 08:57:57
{{#time:j"."n"."Y H":"i":"s|1 year 1 month 1 week 1 day}} In einem Jahr, einem Monat, einer Woche und einem Tag 3.3.2013 08:57:57
nur aktuelles Datum
{{#time:xjj. xjF xjY}} Aktuelles Datum nach dem jüdischen Kalender 28. Tevet 5772
{{#time:xmj. xmF xmY}} Aktuelles Datum nach dem islamischer Zeitrechnung 28. Safar 1433
{{#time:xij. xiF xiY}} Aktuelles Datum nach dem iranischen Kalender 3. Bahman 1390
{{#time:j. F xkY}} Aktuelles Datum nach dem Thailändischen Sonnenkalender 23. Januar 2555
{{#time:j. F xoY}} Aktuelles Datum nach dem chinesischen Minguo-Kalender 23. Januar 101
{{#time:xtY/n/j}} Aktuelles Datum nach dem japanischen Nengō-Kalender 平成24/1/23

Siehe das GNU tar manual für weitere Informationen.

[Bearbeiten] Funktion rel2abs

{{#rel2abs:}} ermöglicht die relative Navigation in Unterseiten.

Ein relativer Seitenpfad kann ".", ".." sein oder mit "/", "./" "../" beginnen.

Relativer Seitenpfad Basis Beispiel Ergebnis
. {{#rel2abs: .}} Hilfe:Vorlagenprogrammierung
.. {{#rel2abs: ..}}
. ns:a/b {{#rel2abs: .|ns:a/b}} ns:a/b
.. ns:a/b {{#rel2abs: ..|ns:a/b}} ns:a
/x ns:a/b {{#rel2abs: /x|ns:a/b}} ns:a/b/x
./x ns:a/b {{#rel2abs: ./x|ns:a/b}} ns:a/b/x
../x ns:a/b {{#rel2abs: ../x|ns:a/b}} ns:a/x
../../x ns:a/b {{#rel2abs: ../../x|ns:a/b}} x

[Bearbeiten] Funktion titleparts

{{#titleparts:}} gibt die angegebene Anzahl an Teilen (ab einer angegebenen Stelle) eines Seitentitels zurück, die durch einen Schrägstrich ("/") getrennt sind. Beispiele:

  • {{#titleparts:Hilfe:Verweis/a/b|0}} ergibt Hilfe:Verweis/a/b (Der ganze Name)
  • {{#titleparts:Hilfe:Verweis/a/b|1}} ergibt Hilfe:Verweis
  • {{#titleparts:Hilfe:Verweis/a/b|2}} ergibt Hilfe:Verweis/a
  • {{#titleparts:Hilfe:Verweis/a/b|1|2}} ergibt a
  • {{#titleparts:Hilfe:Verweis/a/b|2|2}} ergibt a/b

Mit negativen Werten wird von rechts der Teil zurückgegeben:

  • {{#titleparts:Hilfe:Verweis/a/b|1|-1}} ergibt b

Die Funktion ist nur für Seitennamen ausgelegt. Daher funktionieren die Funktion nur mit Zeichen, die auch im Seitennamen erlaubt sind. Im Fehlerfall wird der gesamte Parameter zurückgegeben.

[Bearbeiten] Substitution mit subst und safesubst

Beide Funktionen werden als Präfix zu einer Vorlage oder Funktion verwendet und dienen dazu, dass der entsprechende Vorlagen- oder Funktionsaufruf durch dessen Inhalt ersetzt (substituiert) wird. Nach dem Doppelpunkt darf dabei kein Leerzeichen stehen. Beide Funktionen verhalten sich weitgehend identisch, außer das bei einer nichtsubstituierenden Verwendung der komplette Ausdruck {{subst:...}} ungeparst bleibt, während der Ausdruck {{safesubst:...}} so behandelt wird als wäre der safesubst:-Präfix nicht vorhanden.

Die Ersetzung geschieht dabei nicht rekursiv, d.h. in einer Vorlage verwendete Vorlagen- oder Funktionsaufrufe werden übernommen so wie sie sind anstatt wiederum aufgelöst zu werden.

Als Beispiel diene die Vorlage:GeradeOderUngerade mit dem Inhalt {{#ifexpr:{{{1}}} mod 2|ungerade|gerade}}. Beim Abspeichern des Seiteninhalts Die Zahl 7 ist {{subst:GeradeOderUngerade|7}}. würde dieser durch Die Zahl 7 ist {{#ifexpr:7 mod 2|ungerade|gerade}}. ersetzt werden. Wie man sieht werden die Parameter mit ihren Eingabewerten belegt (d.h. hier {{{1}}}), aber nur die Vorlage direkt selber durch ihren Inhalt ersetzt, nicht aber die enthaltenen Ausdrücke.

[Bearbeiten] rekursive Substitution

Für eine weitergehende d.h. rekursive Substitution müssen die enthaltenen Vorlagen oder ParserFunctions ebenfalls explizit substituiert werden. Dabei kann der Inhalt des Beispiels aber nicht einfach in {{subst:#ifexpr:{{{1}}} mod 2|ungerade|gerade}} abgeändert werden, da schon beim Abspeichern unmittelbar die Substitution ausgeführt werden würde. Da der Parameter 1 noch unbelegt ist gibt der Parser einen Fehler zurück da der gesamt Ausdruck nicht auswertbar ist und diese Fehlermeldung würde wegen der Substitution als Vorlageninhalt abgespeichert.

Zum Erreichen einer rekursiven Substitution muss also verhindert werden, dass diese schon beim Abspeichern angewendet wird. Dafür gibt es zwei Möglichkeiten:

  • <includeonly>safesubst:</includeonly>
  • {{{|safesubst:}}}

Für beide Fälle kann auch subst verwendet werden. safesubst ist hier jedoch vorzuziehen, da sich subst unterschiedlich verhält je nachdem ob die entsprechende Seite (hier Vorlage:GeradeOderUngerade) substituierend (d.h. {{subst:GeradeOderUngerade|...}} oder nicht-substituierend (d.h. {{GeradeOderUngerade|...}}) verwendet wird.

Wenn im gegebenen Beispiel Vorlage:GeradeOderUngerade der Inhalt nach {{{{{|safesubst:}}}#ifexpr:{{{1}}} mod 2|ungerade|gerade}} würde bei einer Substitution der Vorlage der Seiteninhalt durch das gewünschte Die Zahl 7 ist gerade. ersetzt werden. Um eine Vorlage demnach vollständig rekursiv substituieren zu können, d.h. das Ergebnis wäre Wikitext ohne Vorlagen- oder Funktionsaufrufe, müsste <includeonly>subst:</includeonly> oder {{{|safesubst:}}} für alle darin verwendeten von Funktionen und Vorlagen rekursiv gesetzt werden.

Anmerkung: Einige Funktionen können sich sehr unterschiedlich verhalten, z.B. nicht substituierbar sein. Daher ist ein Test vorher immer anzuraten. Für weitere Tipps und Tricks gibt es eine englischsprachige Hilfeseite.

[Bearbeiten] Besonderheiten

[Bearbeiten] Tabellen

siehe Problem: Senkrechter Strich in Parameterwerten

[Bearbeiten] Funktion tag

Sämtliche Extension-Tags von MediaWiki können mit Hilfe der Funktion #tag angesprochen und ausgewertet werden. Dies ist insbesondere bei der Verwendung von dynamischen Imagemaps oder Quellenangaben hilfreich bzw. erforderlich.

So kann innerhalb von Vorlagen anstelle von <imagemap>…</imagemap> auch {{#tag:imagemap|…}} geschrieben werden, wobei senkrechte Striche durch {{!}} zu ersetzen sind. Damit wird die Auswertung von Parametern innerhalb der Imagemap ermöglicht.

[Bearbeiten] Links und CSS-Farben maskieren

Besonders interessant ist die Funktion auch zusammen mit <nowiki>. So können in Vorlagen potienzielle Links maskiert werden, damit sie als reiner Text ausgegeben werden: {{#tag:nowiki|{{{Link}}}}} (zum Beispiel wenn eine URL selbst auf eine andere Seite zeigen soll). Farbangaben im Format #rrggbb werden normalerweise als Aufzählungen interpretiert, wenn sie als Parameter übergeben werden (Bug 12974). Dies lässt sich auf gleiche Weise umgehen: {{#tag:nowiki|{{{Farbe}}}}}.

[Bearbeiten] Programmierhilfen

[Bearbeiten] Zahlen

Um den Quelltext nicht zu sehr aufzublähen, gibt es Vorlagen, mit denen Berechnungen eingebunden werden können:

  • Vorlage:Ziffer extrahiert eine Ziffer aus einer Ganzzahl
  • Vorlage:Quersumme berechnet eine Quersumme
  • Vorlage:Min und Vorlage:Max bestimmen das Minimum bzw. Maximum von zwei bis drei Zahlen
  • Vorlage:IstZahl prüft, ob ein Parameter eine Zahl ist oder nicht
  • Vorlage:Maß Formatierung einheitenbehafteter Parameter
  • Vorlage:DezimalkommaZuPunkt vereinheitlicht das Zahlenformat für #expr:, wenn es gemischt vorkommt. Vorlage:Formnum wandelt das Zahlenformat wieder zurück in die deutsche Schreibweise mit , als Dezimaltrenner. Die Verwendung dieser beiden Vorlagen ist nur sinnvoll, wenn mit Parameterwerten bestehender Vorlagen, die in unterschiedlichem Format vorliegen, gearbeitet werden soll, ohne sie durch einen Boteinsatz in ein einheitliches Format bringen zu müssen. Es ist nicht sinnvoll, neue Infoboxen und dergleichen mit diesen Vorlagen zu versehen. Bitte stattdessen die Parameterwerte einfach gleich von Anfang an im richtigen Format erfassen und die Parserfunktion {{formatnum:…}} verwenden.

[Bearbeiten] Überprüfung von Zeichenketten

Mit #(if)expr: können zwar numerische Werte, jedoch keine Zeichenketten verwendet werden. Dies lässt sich aber über die folgenden Vorlagen bewerkstelligen. Sie sind nicht Teil der ParserFunctions, werden allerdings der Vollständigkeit halber hier mit aufgelistet, um einen umfassenden Überblick über die zur Vorlagen-Programmierung einsetzbaren Mittel zu geben.

Bitte verwende diese Vorlagen mit Bedacht, da sie (bis auf str left) nicht server-freundlich sind.

  • {{Str left|Text|Anzahl}} gibt die ersten Anzahl Zeichen von Text zurück
  • {{Str find|Text|Teilstring}} dient der Suche eines Teilstrings in einem Text
  • {{Str len|Text}} ermittelt die Länge von Text (von 0 bis 128)
  • {{Str index|Text|Index}} gibt ein einzelnes Zeichen aus Text zurück, dessen Position durch Index festgelegt wird
  • {{Str right|Text|Offset}} gibt die Zeichen rechts von Offset wieder
  • {{Str sub|Text|Index|Anzahl}} gibt den Teil an der Position Index mit Anzahl Zeichen von Text zurück
  • {{Str ≥ len|Text|Länge|…}} prüft, ob Text nicht kürzer als eine gegebene Länge ist (effizienter als str len)

[Bearbeiten] Boolsche Funktionen

Um komplizierte #if-Konstruktionen zu vermeiden, stehen die folgenden Vorlagen zur Verfügung. Sie basieren sämtlich auf der Schachtelung von #if-Funktionen und können daher auch rein mit Parser-Funktionen beschrieben werden. Ihr Einsatz dient meist nur der Übersichtlichkeit, teilweise erfüllt er auch Vereinfachungsansprüche, wenn bereits die übergebenen Parameter komplizierte Ausdrücke sind (und andernfall mehrfach ausgewertet werden müssten, vgl. Vorlage:ggf).

Nachfolgend bedeutet wahr, dass der jeweilige Parameter eine nicht-leere Zeichenkette enthält sowie nicht nur aus Whitespaces besteht. Die Rückgabe für wahr ist üblicherweise 1, sodass das Ergebnis sowohl in Berechnungen wie auch in Bedingungen eingesetzt (weiterverarbeitet) werden kann.

Syntax Beschreibung Wahrheitstabelle
{{Booland|A|B}} Das Ergebnis ist wahr, wenn A und B wahr sind.
A
W F
B W Symbol OK.svg
F
{{Boolandeq|A|B|C}} Das Ergebnis ist wahr, wenn A wahr und B gleich C ist.
eq(B,C)
W F
B W Symbol OK.svg
F
{{Boolor|A|B}} Das Ergebnis ist wahr, wenn A und/oder B wahr sind.
Bitte verkette die zu überprüfenden Parameter einfach, zum Beispiel:

{{#if: {{{A|}}}{{{B|}}} | <dann-text> | <sonst-text> }}

A
W F
B W Symbol OK.svg Symbol OK.svg
F Symbol OK.svg
{{Boolxor|A|B}} Das Ergebnis ist wahr, wenn entweder A oder B wahr ist.
A
W F
B W Symbol OK.svg
F Symbol OK.svg
{{Booleq|A|B}} Das Ergebnis ist wahr, wenn A und B gleich sind.
A
W F
B W Symbol OK.svg
F Symbol OK.svg
{{Boolnand|A|B}} Das Ergebnis ist wahr, wenn A oder B falsch sind.
A
W F
B W Symbol OK.svg
F Symbol OK.svg Symbol OK.svg
{{Boolnor|A|B}} Das Ergebnis ist wahr, wenn A und B falsch sind.
Bitte verwende die bei boolor beschriebene Oder-Syntax mit vertauschten Dann- und Sonst-Zweigen.
A
W F
B W
F Symbol OK.svg
{{Boolandnot|A|B}} Das Ergebnis ist wahr, wenn A wahr und B falsch ist.
A
W F
B W
F Symbol OK.svg
{{Boolandnoteq|A|B|C}} Das Ergebnis ist wahr, wenn A wahr und B ungleich C ist.
eq(B,C)
W F
B W
F Symbol OK.svg
{{Boolornot|A|B}} Das Ergebnis ist wahr, wenn A wahr oder B falsch ist.
A
W F
B W Symbol OK.svg
F Symbol OK.svg Symbol OK.svg
{{Boolnot|A}} Das Ergebnis ist wahr, wenn A falsch ist.
Bitte nutze ein if mit leerem dann-Zweig, zum Beispiel:

{{#if: {{{A|}}} | <!--nichts--> | <sonst-text> }}

A
W F
B W Symbol OK.svg
F Symbol OK.svg

Des Weiteren gibt es noch Vorlage:Booland3 und Vorlage:Booland4, welche der Und-Verknüpfung von drei bzw. vier Zeichenketten dienen.

[Bearbeiten] Testen

Vorlagen mit Parserfunktionen können auf der Spezialseite Vorlagen expandieren getestet werden.

Dabei wird der Aufruf der Vorlage (bspw. Vorlage:Infobox Tennisspieler) mit ihren Parametern in das „Eingabefeld“ kopiert:

{{Infobox Tennisspieler
 | Nationalität = deutsch
 | Geburtstag = 01.01.2000
 | ErsteProfisaison = 2000
 | Spielhand = links oder rechts
}}

Über das Feld „Kontexttitel“ kann optional ein Seitenname übergeben werden, der die seitenabhängige Variable {{PAGENAME}} füllt.

Beispielhafter Seitenname

Im o. g. Beispiel führt dies dazu, dass in der Vorschau oberhalb der Infobox nicht „ExpandTemplates“, sondern „Beispielhafter Seitenname“ angezeigt wird.

Beim Erstellen oder Ändern von Vorlagen kann der Quelltext kurzzeitig auf die Vorlage:Spielwiese kopiert und dort geändert werden, bis er richtig funktioniert. Danach wird der getestete Quelltext in das „Bearbeiten“-Fenster der eigentlichen Vorlage kopiert, gespeichert und die Spielwiese wieder gesäubert.

Weiterführende Informationen finden sich unter Extension:ExpandTemplates.

[Bearbeiten] Siehe auch

[Bearbeiten] Weblinks

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Mitmachen
Drucken/exportieren
Werkzeuge
In anderen Sprachen