Parser-Funktionen
Mit Hilfe der Erweiterung ParserFunctions verfügt MediaWiki über verschiedene Konstrukte einer Programmiersprache für die Verwendung in Vorlagen.
Beschreibung der ParserFunctions
[Bearbeiten]Funktion if
[Bearbeiten]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.
Achtung: if
unterstützt keine Gleichungen oder Ähnliches. Siehe dafür ifeq
und ifexpr
.
Funktion ifeq
[Bearbeiten]ifeq
vergleicht zwei Zeichenketten und gibt je nach Ergebnis verschiedene Texte zurück.
{{#ifeq: <text 1> | <text 2> | <text wenn gleich> | <text wenn ungleich> }}
Funktion ifexist
[Bearbeiten]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> }}
Interwiki-Links werden nicht geprüft. Es wird immer angenommen, dass Lemmata in anderen Wikis nicht existieren.
Funktion expr
[Bearbeiten]expr berechnet mathematische Ausdrücke.
{{ #expr: <ausdruck> }}
Operator | Operation | Beispiel |
---|---|---|
* | Multiplikation | {{#expr: 30 * 7}} = 210 |
/ oder div | Division | {{#expr: 30 / 7}} = 4.2857142857143 |
+ | Addition | {{#expr: 30 + 7}} = 37 |
- | Subtraktion (or Negation) | {{#expr: 30 - 7}} = 23 |
abs | wandelt eine negative Zahl in eine positive Zahl um | {{#expr: abs(7-30)}} = 23 |
^ | Potenzierung | {{#expr: 30 ^ 7}} = 21870000000 |
mod | Modulo, der Rest einer Division | {{#expr: 30 mod 7}} = 2 |
round | Rundet die Zahl auf der linken Seite auf die Anzahl Nachkommastellen, die von der Zahl auf der rechten Seite angegeben wird | {{#expr: 30 / 7 round 7}} = 4.2857143 |
= | 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 |
and | Logisches UND | {{#expr: 30 and 7}} = 1 |
or | Logisches ODER | {{#expr: 30 or 7}} = 1 |
not | Logisches NICHT | {{#expr: not 7}} = 0 |
( ) | Gruppierung/Klammerung | {{#expr: (30 + 7) * 7 }} = 259 |
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).
Funktion ifexpr
[Bearbeiten]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.
Funktion switch
[Bearbeiten]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.)
„Durchfall“-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.
Funktion time
[Bearbeiten]#time ist eine Zeit- und Datums-Formatierungs-Funktion. Die Syntax ist
- {{ #time: format }}
oder
- {{ #time: format | time }}
Wenn „time“ nicht angegeben wird, wird die Zeit zum 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 „null edit“ (Seite bearbeiten und Speichern ohne Änderung) erfolgen.
Der „format“-Parameter ist ähnlich den der PHP-Datumsparameter.
Die folgenden Codes haben dieselbe Bedeutung wie in PHP. Bedeutende Differenzen vom PHP-Verhalten (abgesehen von sprachlichen und lokalen Unterschieden) sollten als Fehler der Parserfunktionen gesehen und als Bug gemeldet werden. Alle numerischen Codes geben Zahlen entsprechend der lokalen Spracheinstellung zurück, durch die Nutzung des xn-Codes kann dieses Verhalten überschrieben werden.
Code | Beschreibung | Ausgabe |
---|---|---|
d | Tag, mit führender Null | 27 |
D | Abkürzung des Wochentages, nur in seltenen Fällen internationalisiert. | Mi |
j | Tag, ohne führende Null | 27 |
l | Ausgeschriebener Name des Wochentages, nur in seltenen Fällen internationalisiert. | Mittwoch |
F | Ausgeschriebener Name des Monatsnamens, in der Regel internationalisiert | November |
m | Monat, mit führender Null. | 11 |
M | Abgekürzter Name des Monatsnamens, in der Regel internationalisiert | Nov. |
n | Monat, ohne führende Null. | 11 |
Y | Jahr, 4-stellig | 2024 |
y | Jahr, 2-stellig. | 24 |
H | Stunde, mit führender Null | 00 |
i | Minute, mit führender Null | 41 |
s | Sekunde, mit führender Null | 18 |
Die folgenden Codes sind Erweiterungen zu PHP:
Code | Beschreibung |
---|---|
xn | Formatiert den nächsten numerischen Code als Roh-ASCII. Beispiel, in Hindi: {{ #time:H, xnH}} ergibt ०६, 06. |
xr | Formatiert den nächsten numerischen Code als römische Zahl. |
xg | Gibt die Genitivform des Monatsnamens aus; für Sprachen, die zwischen Genitiv und Nominativ unterscheiden. |
xx | Der Buchstabe „x“ |
Jedes unbekannte Zeichen wird unbearbeitet zur Ausgabe durchgereicht. Dazu gibt es zwei Konventionen:
- Zeichen in doppelten Anführungszeichen werden als solche ausgegeben (ohne Anführungszeichen). Anführungszeichen alleine werden als solche ausgegeben. Beispiele:
- {{ #time: "Der Monat ist" F}} → Der Monat ist November
- {{ #time:i's"}} → 41'18"
- Backslash-escaping wird unterstützt: \H ergibt das Zeichen H, \" ergibt das Zeichen ".
Das Format des „time“-Parameters ist identisch mit der PHP-Funktion strtotime(). Relative Angaben, wie zum Beispiel „+10 hours“, werden unterstützt, welche für eine Zeitzonen-Berechnung genutzt werden können.
Code | Beschreibung | Ausgabe |
---|---|---|
{{ #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 | 24:11:2024 14:01:18 |
{{ #time:j"."n"."Y H":"i":"s|yesterday}} | Gestern | 26.11.2024 00:00:00 |
{{ #time:j"."n"."Y H":"i":"s|tomorrow}} | Morgen | 28.11.2024 00:00:00 |
{{#time:j"."n"."Y H":"i":"s|2 days}} | Übermorgen | 29.11.2024 00:41:18 |
{{#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 | 12.2.2027 00:41:18 |
{{#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 | 4.1.2026 00:41:18 |
Siehe das „GNU tar manual“ 7. Date input formats für weitere Informationen.
Funktion titleparts
[Bearbeiten]{{#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}}
ergibtHilfe:Verweis/a/b
(Der ganze Name){{#titleparts:Hilfe:Verweis/a/b|1}}
ergibtHilfe:Verweis
{{#titleparts:Hilfe:Verweis/a/b|2}}
ergibtHilfe:Verweis/a
{{#titleparts:Hilfe:Verweis/a/b|1|2}}
ergibta
{{#titleparts:Hilfe:Verweis/a/b|2|2}}
ergibta/b
Details zu titleparts
[Bearbeiten]- Die Parameter kann man am sinnvollsten mit Titel,Anzahl,Start beschreiben.
- Wenn Start fehlt oder 0 oder 1 ist, wird Titel durch Start nicht verändert.
- Wenn Start positiv ist, werden aus Titel am Anfang Start-1 Parts entfernt.
- Wenn Start negativ ist, wird alles vor dem Start-Part entfernt, wobei Start vom Ende des Titel gezählt wird.
- Was von Titel übrig ist, nenne ich mal TitelNeu.
- Wenn Anzahl 0 ist, wird TitleNeu durch Anzahl nicht verändert.
- Wenn Anzahl positiv ist, werden so viele Parts aus dem Anfang von TitelNeu zurück gegeben, wie in Anzahl angegeben ist.
- Wenn Anzahl negativ ist, werden am Ende von TitelNeu so viele Teile entfernt, wie in Anzahl angegeben ist.
Dadurch lassen sich beliebige Teile von Titel zurück geben. Weitere Beispiele:
{{#titleparts:Hilfe:a/b/c/d/e/f/g|0|4}}
ergibtd/e/f/g
(der Teil von Titel, der mit dem 4.Part beginnt){{#titleparts:Hilfe:a/b/c/d/e/f/g|-3}}
ergibtHilfe:A/b/c/d
(die letzten 3 Parts wurden entfernt){{#titleparts:Hilfe:a/b/c/d/e/f/g|2|-5}}
ergibtc/d
(die ersten 2 von den letzten 5 Parts){{#titleparts:Hilfe:a/b/c/d/e/f/g|-1|-4}}
ergibtd/e/f
(von den letzten 4 wurde der letzte entfernt)
Wenn Start 0 oder 1 ist, wird im ersten Part das erste Zeichen nach einem Doppelpunkt zu einem Großbuchstaben geändert. (Bug?) Beispiel:
{{#titleparts:hilfe:a/b/c|0|1}}
ergibtHilfe:A/b/c
Siehe dazu r22711 und bug 6067.
Verwendung mit subst
[Bearbeiten]Die ParserFunctions können auch mit subst verwendet werden, solange kein Leerzeichen zwischen subst:
und #
steht.
Überprüfung von Zeichenketten
[Bearbeiten]Mit #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.
Nachfolgend bedeutet wahr, dass der jeweilige Parameter eine nicht-leere Zeichenkette enthält sowie nicht nur aus Whitespaces besteht.
Syntax | Beschreibung | Wahrheitstabelle | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
{{booland|A|B}} | Wenn A und B wahr sind, ist das Ergebnis wahr. |
| |||||||||||||
{{boolor|A|B}} | Wenn A oder B wahr sind, ist das Ergebnis wahr. Statt dessen können die zu überprüfenden Parameter auch einfach verkettet werden, z. B.:
|
| |||||||||||||
{{boolxor|A|B}} | Wenn entweder A oder B wahr ist, ist das Ergebnis wahr. |
| |||||||||||||
{{boolnxor|A|B}} | Wenn A und B falsch sind oder A und B wahr sind, ist das Ergebnis falsch. |
| |||||||||||||
{{boolnand|A|B}} | Wenn A und B wahr sind, ist das Ergebnis falsch. |
| |||||||||||||
{{boolnor|A|B}} | Wenn A und B falsch sind, ist das Ergebnis wahr. Statt dessen kann auch die oben beschriebene Oder-Syntax mit vertauschten Dann- und Sonst-Zweigen verwendet werden. |
| |||||||||||||
{{boolnot|A}} | Wenn A falsch ist, ist das Ergebnis wahr. |
Besonderheiten
[Bearbeiten]Tabellen
[Bearbeiten]Die Wikisyntax für Tabellen kann derzeit nicht innerhalb von Bedingungen verwendet werden, daher existieren zwei Workarounds:
Methode A
[Bearbeiten]Man versteckt das Pipe-Zeichen („|“) vor den Parserfunktionen indem man die Vorlage ! verwendet.
Beispiel
[Bearbeiten]{{#if: {{{1|}}} | {{!}} Zelleninhalt | keine Zelle}}
Weitere Vorlagen
[Bearbeiten]Parameter | Inhalt |
---|---|
|| | {{!!}} |
|+ | {{!+}} |
|- | {{!-}} |
|-| | {{!-!}} |
|- ! |
{{!~}} |
{| | {{(!}} |
|} | {{!)}} |
{{ | {{((}} |
}} | {{))}} |
= | {{=}} |
Zusaätzlich zu diesen Vorlagen gibt es das Magische Wort „!“. {{!}}
erzeugt |.
Methode B
[Bearbeiten]Man verwende HTML-Tabellensyntax.
Programmierhilfen
[Bearbeiten]Um den Quelltext nicht zu sehr aufzublähen, gibt es auf Wikipedia 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.
Bei Bedarf können diese Vorlagen importiert werden.
Testen
[Bearbeiten]Vorlagen mit Parserfunktionen können auf der Spezialseite „Vorlagen expandieren“ getestet werden.
Siehe auch
[Bearbeiten]Weblinks
[Bearbeiten]- Erweiterung:ParserFunctions – Zentrale Beschreibungsseite im MediaWiki
- Hilfe:Erweiterung:ParserFunctions – Zentrale Hilfeseite im MediaWiki
- Hilfe:ParserFunctions in Vorlagen – Zentrale Hilfeseite im MediaWiki
- The discussion about the ParserFunctions in the Wikitech-l list archive
- Expr.php
- ParserFunctions.php
- ParserFunctions in MediaWiki SVN