Een parserfunctie bewerkstelligt net als een sjabloon een resultaat dat kan variëren afhankelijk van parameters. Het verschil is dat de werking van een parserfunctie in de software is vastgelegd, terwijl die van een sjabloon wordt bepaald door een pagina die net als andere pagina's door gebruikers bewerkt kan worden. Parserfuncties worden vaak gebruikt in een sjabloon, waarbij parameters van het sjabloon worden doorgegeven aan de parserfunctie; bij een sjabloonparameter voor een datum kan een parserfunctie bijvoorbeeld de voorafgaande datum bepalen. Sommige parserfuncties zijn onderdeel van MediaWiki zelf, en sommige van de MediaWiki-extensie ParserFunctions. Ze hebben in het algemeen de volgende opbouw:
((#functienaam: <argument 1> | <argument 2> | <argument 3> ))
Binnen de argumenten van de meeste parserfunctie moet eigenlijk altijd minstens een variabele parameter voorkomen. Het is mogelijk om
((#expr:3+5))
te schrijven, maar erg zinvol is dat meestal niet: je kunt net zo goed 8 schrijven (uitzonderingen daargelaten). Het gevolg is dat parserfuncties vrijwel uitsluitend in sjablonen voorkomen.
Een voorbeeld van een uitzondering is als het resultaat van een parserfunctie van andere factoren afhankelijk is:
Volgend jaar is ((#expr:1+((#time:Y)))) (resulteert in: Volgend jaar is 2025).
Gaat het om een ingewikkelde functie die je niet zelf kunt of wilt uitrekenen, dan kun je subst gebruiken, bijvoorbeeld:
((subst:#expr: (5*5+12*12)^0.5))
Op deze manier wordt tijdens het opslaan van de pagina de berekening uitgevoerd en vervolgens wordt niet de functie maar het resultaat opgeslagen.
De expr functie evalueert rekenkundige uitdrukkingen. De ondersteunde bewerkingen (ongeveer in volgorde van voorrang) zijn:
Functies | ||
---|---|---|
Teken | Bewerking | Voorbeeld |
^ | Machtsverheffen | ((#expr: 30 ^ 7)) = 2.187E+10 |
* | Vermenigvuldiging | ((#expr: 30 * 7)) = 210 |
/ of div | Deling | ((#expr: 30 / 7)) = 4.2857142857143 |
+ | Optelling | ((#expr: 30 + 7)) = 37 |
- | Aftrekking (or negatie) | ((#expr: 30 - 7)) = 23 |
mod | Modulo, levert de rest na deling | ((#expr: 30 mod 7)) = 2 |
round | Rondt een getal (omhoog of omlaag) af op het aangegeven aantal cijfers na het decimaalteken, rechts ingegeven | ((#expr: 30.7 round 0)) = 31 ((#expr: 30 / 7 round 7)) = 4.2857143 |
= | Gelijkheid | ((#expr: 30 = 7)) = 0 |
<> of != | Ongelijkheid | ((#expr: 30 <> 7)) = 1 |
< | Kleiner dan | ((#expr: 30 < 7)) = 0 |
> | Groter dan | ((#expr: 30 > 7)) = 1 |
<= | Kleiner dan of gelijk aan | ((#expr: 30 <= 7)) = 0 |
>= | Groter dan of gelijk aan | ((#expr: 30 >= 7)) = 1 |
and | Logische EN | ((#expr: 30 and 7)) = 1 |
or | Logische OF | ((#expr: 30 or 7)) = 1 |
not | Logische NIET | ((#expr: not 7)) = 0 |
( ) | Groeperingstekens | ((#expr: (30 + 7) * 2 )) = 74 |
Goniometrische functies (voorbeelden voor een hoek van 60°) | ||
sin | geeft de sinus van een hoek (uitgedrukt in radialen) | ((#expr:sin((2*pi)/6))) = 0.86602540378444 |
cos | geeft de cosinus van een hoek (uitgedrukt in radialen) | ((#expr:cos((2*pi)/6))) = 0.5 |
tan | geeft de tangens van een hoek (uitgedrukt in radialen) | ((#expr:tan((2*pi)/6))) = 1.7320508075689 |
asin | geeft de hoek in radialen, berekend uit de sinus van die hoek | |
acos | geeft de hoek in radialen, berekend uit de cosinus van die hoek | |
atan | geeft de hoek in radialen, berekend uit de tangens van die hoek | |
exp | Exponentiële functie, exp(x) of ex, een functie van de exponent en wel met het grondtal van de natuurlijke logaritme | ((#expr:exp(5))) = 148.41315910258 |
ln | Natuurlijke logaritme van een getal | ((#expr:ln(2))) = 0.69314718055995 |
abs | Absolute waarde: negatieve getallen worden omgevormd tot positieve | ((#expr:abs(-4))) = 4 |
ceil | afronden naar het eerstvolgende grotere gehele getal | ((#expr:ceil(5.4))) = 6 ((#expr:ceil(-5.4))) = -5 |
floor | afronden naar het eerstvolgende kleinere gehele getal | ((#expr:floor(5.4))) = 5 ((#expr:floor(-5.4))) = -6 |
trunc | afronden op geheel getal door decimalen te verwaarlozen | ((#expr:trunc(5.4))) = 5 ((#expr:trunc(-5.4))) = -5 |
Constanten | ||
e | Geeft e | ((#expr:e)) = 2.718281828459 |
pi | pi, verhouding tussen de omtrek en de middellijn van een cirkel | ((#expr:pi)) = 3.1415926535898 |
Voorbeeld:
((#expr: (100 - 32) / 9 * 5 round 0 )) geeft 38
wat neerkomt op 100°F omgerekend in °C, afgerond op het dichtstbijzijnde gehele getal.
De if functie is een als-dan-anders constructie. De opbouw is:
(( #if: <condition> | <then text> | <else text> ))
Als de conditie een lege tekenreeks of slechts witruimte oplevert dan merken we deze aan als onwaar, en geeft de else text terug. Anders is de uitkomst de then text.
Een illustratie:
((Template|parameter=something)) ((Template)) ((Template|parameter=)) | | | | | | | | | (( #if: (({parameter|))} | Parameter is defined. | Parameter is undefined, or empty ))
Merk op dat de if functie de not noch de "=" tekens en evenmin rekenkundige uitdrukkingen ondersteunt. ((#if: 1 = 2|ja|nee)) levert als resultaat "ja" want de tekenreeks "1 = 2" is niet blanco. De bedoeling is een "als gedefinieerd" constructie. Voor het vergelijken van tekenreeksen dient de ifeq. Voor het vergelijken van getallen de ifexpr.
ifeq vergelijkt twee tekenreeksen en retourneert een andere tekenreeks afhankelijk van het resultaat van de vergelijking. Deze is als volgt opgebouwd:
(( #ifeq: <comparison text 1> | <comparison text 2> | <equal text> | <not equal text> ))
Hebben de argumenten als resultaat een getalswaarde, dan worden ze als zodanig vergeleken. 123 is gelijk aan 0123.
Geeft een response naar keuze, afhankelijk van de geldigheid van de opgegeven expressie, of voert de expressie uit indien deze geldig is.
Parameters:
Syntax:
((#IfError:<Expressie> | [<Fouttekst>] | [<Succestekst>] ))
Voorbeelden:
Code | Resultaat | Toelichting |
---|---|---|
((#IfError:((#Expr:2+3)) | Fout | Goed)) | Goed | #Expr:2+3 is geldig |
((#IfError:((#Expr:2+X)) | Fout | Goed )) | Fout | #Expr:2+X is ongeldig (optellen van een cijfer en een letter is niet mogelijk) |
((#IfError:((#Expr:2+3)) )) | 5 | #Expr:2+3 is geldig, de expressie wordt uitgevoerd, het resultaat is 5 |
((#IfError:((#Expr:2+X)) )) | #Expr:2+X is ongeldig, het resultaat is een lege string | |
((#IfError:((#Expr:2+3)) | Fout )) | 5 | #Expr:2+3 is geldig, de expressie wordt uitgevoerd, het resultaat is 5 |
((#IfError:((#Expr:2+X)) | Fout )) | Fout | #Expr:2+X is ongeldig, het resultaat is "Fout" |
ifexist geeft een van twee mogelijke waarden, afhankelijk van het bestaan van een lemma.
(( #ifexist: <lemma> | <dan deze tekst> | <anders deze tekst> ))
Argumenten:
Nota bene:
Voorbeelden:
((#ifexist: Amsterdam | ja | nee )) | = ja | ||
((#ifexist: amsterdam | ja | nee )) | = ja | (de eerste letter is niet hoofdlettergevoelig) | |
((#ifexist: AmSterDam | ja | nee )) | = nee | (alle andere letters zijn wél hoofdlettergevoelig !) | |
((#ifexist: m:NL_Help:Inleiding | ja | nee )) | = nee | (de functie werkt niet voor pagina's buiten de lokale wiki. De interwiki prefix wordt geïnterpreteerd als deel van de titel. Omdat een dergelijke pagina niet kan bestaan, zegt het dus nee, ook wanneer de pagina op die andere wiki wél bestaat) | |
Het resultaat van ifexist kan door andere functies, bijvoorbeeld expr, verder verwerkt worden: | |||
Er zijn ((#expr: ((#ifexist:Driebergen|3|0)) + ((#ifexist:Zevenbergen|7|0)) + ((#ifexist:Negenbergen|9|0)) )) bergen aanwezig |
= Er zijn 10 bergen aanwezig |
ifexpr evalueert een rekenkundige bewerking en geeft een van twee tekenreeksen als uitkomst.
(( #ifexpr: <expression> | <then text> | <else text> ))
In het geval van nul als uitkomst dan resulteert de else text zo niet de then text. Uitdrukkingsopbouw is analoog aan expr.
Converteert een relatief path naar een absoluut path. Een relatief path kan beginnen met "/", "./" of "../", of bestaan uit "." of "..".
Parameters:
Syntax:
((#rel2abs: <relatief path> )) of ((#rel2abs: <relatief path> | <base path> ))
Wanneer toegepast op deze pagina geeft [[((#rel2abs:/Sub 1))]]
als resultaat Help:Parserfuncties/Sub 1
, dus de complete titel van de subpagina "/Sub 1".
Bij gebruik op een subpagina (die dus al een "/" in de titel heeft) kan met ((#rel2abs:../Sub 2))
de titel van een subpagina "/Sub 2" op hetzelfde niveau opgevraagd worden, of met ((#rel2abs:..))
de titel van de pagina op één niveau hoger.
Door ook de tweede parameter (base path) in te vullen kan van een andere pagina de titel van de gewenste subpagina opgevraagd worden, b.v. [[((#rel2abs:/Toepassingen|Bose-Einsteincondensatie))]]
geeft Bose-Einsteincondensatie/Toepassingen
.
switch
vergelijkt een enkele waarde met meerdere andere en geeft een tekenreeks terug als gelijkheid optreedt. In beginsel is de opbouw:
(( #switch: <vergelijkingswaarde> | <waarde¹>=<uitkomst¹> | <waarde²>=<uitkomst²> | ... | <waarden>=<uitkomstn> | <verstekuitkomst> ))
switch
loopt elke waarde af totdat deze gelijkheid vindt met de vergelijkingswaarde. Vindt het die, dan is de bij die waarde horende uitkomst het resultaat (de tekenreeks na het gelijkheidsteken (=)). Vindt het die niet, en de laatste optie bevat geen gelijkheidsteken, dan resulteert de verstekuitkomst.
Merk op dat het mogelijk is waarden te laten "doorlopen" (ter reducering van de noodzaak voor dubbele uitkomsten). Bijvoorbeeld:
(( #switch: <vergelijkingswaarde> | <waarde¹> | <waarde²> | <waarde³>=<uitkomst¹> | ... | <waarden>=<uitkomstn> | <verstekuitkomst> ))
De bijzonderheid is dat waarde¹ en waarde² geen gelijkheidsteken bevatten. Als gelijkheid optreedt bij waarde¹, waarde² of waarde³ dan resulteert de bij waarde³ genoemde uitkomst (uitkomst¹).
Evenals bij Ifeq wordt indien van toepassing een vergelijking op basis van getalswaarde gedaan.
time
geeft tijd en datum (vanaf het jaar 0 tot 9999) in diverse formaten, gebaseerd op UTC. Tevens kunnen er berekeningen mee worden uitgevoerd.
Syntax:
(( #time: <format> ))
(( #time: <format> | <tijd> ))
(( #time: <format> | <tijd> +/- verschil ))
Wil je een aantal dagen van een datum aftrekken, dan moet er een jaartal opgegeven zijn. Voor optellen is dat niet nodig, dan wordt het huidige jaar verondersteld.
De parameter "format" (verplicht) bepaalt het uitvoerformaat, met "tijd" (optioneel) wordt een berekening uitgevoerd. Wanneer geen "tijd" is gespecificeerd, wordt de datum en/of tijd getoond op het moment dat de wikitext van de pagina werd omgezet in html. Door caching kan het voorkomen dat de getoonde tijd wekenlang niet aangepast wordt. Verversen kan worden geforceerd door ?action=purge
toe te voegen aan de URL van de pagina.
De parameter "format" is een tekenreeks, waarvan de syntax overeenkomt met die van PHP's date.
Teken in formatstring | Beschrijving | Voorbeeldoutput | Actuele output (op donderdag 11 juli 2024) |
---|---|---|---|
Jaar: | |||
Y | het jaar in 4 cijfers | 2006 | 2024 |
y | het jaar in 2 cijfers | 06 | 24 |
Maand: | |||
n | Het nummer van de maand in 1 of 2 cijfers | 9 | 7 |
m | Het nummer van de maand in 2 cijfers | 09 | 07 |
M | naam van de maand, afgekort | sep | jul |
F | naam van de maand, volledig | september | juli |
Week: | |||
W | weeknummer volgens ISO 8601 in 2 cijfers | 36 | 28 |
Dag: | |||
j | datum in 1 of 2 cijfer(s) | 10 | 11 |
d | datum in 2 cijfer(s) | 10 | 11 |
z | dag van het jaar, beginnend met 0 (nul) | 252 | 192 |
D | naam van de dag, afgekort | zo | do |
l | naam van de dag. Let op: een kleine letter "L", geen hoofdletter "i". | zondag | donderdag |
N | dagnummer volgens ISO 8601 (maandag = 1; zondag = 7) | 7 | 4 |
w | dagnummer (zondag = 0; zaterdag = 6) | 0 | 4 |
Uur: | |||
a | am (voor 12:00 's middags) of pm (na 12:00 's middags) | am | pm |
A | idem, in hoofdletters | AM | PM |
g | uren in 12 uursformaat, 1 of 2 cijfers | 7 | 11 |
h | uren in 12 uursformaat, 2 cijfers | 07 | 11 |
G | uren in 24 uursformaat, 1 of 2 cijfers | 7 | 23 |
H | uren in 24 uursformaat, 2 cijfers | 07 | 23 |
Minuten en seconden: | |||
i | minuten, 2 cijfers | 09 | 05 |
s | seconden, 2 cijfers | 03 | 40 |
U | seconden verstreken sinds 1 januari 1970, 00:00:00 GMT (Unix Epoch) | 1157872143 | 1720739140 |
Diversen: | |||
L | schrikkeljaar (1: ja; 0: nee) | 0 | 1 |
t | aantal dagen in de huidige maand | 30 | 31 |
c | datum in ISO 8601-formaat; vaste lengte, met voorloopnullen | 2006-09-10T07:09:03+00:00 | 2024-07-11T23:05:40+00:00 |
r | datum in RFC 2822-formaat | Sun, 10 Sep 2006 07:09:03 +0000 | Thu, 11 Jul 2024 23:05:40 +0000 |
Het is mogelijk met een tijd te rekenen. Voorbeelden:
(( #time: d-m-Y | 02-11-2010 +12 days)) | geeft 14-11-2010 |
(( #time: d-m | 14 February +20 days)) | geeft 05-03 (het huidige jaar wordt verondersteld en in dit voorbeeld is dat nodig voor het schrikkeljaar. |
(( #time: d-m | 14 February 2019 -20 days)) | geeft 25-01 (bij aftrekken is een jaartal vereist, ook als er geen jaartal in de uitvoer is en als het schrikkeljaar niet van belang is) |
(( #time: H:i )) | geeft 23:05 (huidige tijd, geldt ook in de voorbeelden hieronder) |
(( #time: H:i | +3 hours)) | geeft 02:05 (in UTC) |
(( #time: H:i | -23 hours)) | geeft 00:05 (in UTC) |
(( #time: H:i | -23 hours 10 minutes)) | geeft 00:15 (in UTC) (let op: dit is min 23 uur plus 10 minuten) |
(( #time: H:i | -23 hours -10 minutes)) | geeft 23:55 (in UTC) |
Het verschil kan in de volgende eenheden opgegeven worden: year(s), month(s), day(s), hour(s), minute(s) en second(s).
Geeft een gewenst aantal segmenten van de opgegeven paginatitel, gescheiden door schuine strepen.
Parameters:
Syntax:
((#TitleParts:<Titel> | [<Aantal>] | [<Begin>] ))
Voorbeelden:
Code | Resultaat | Toelichting |
---|---|---|
((#TitleParts:Hoofdpagina/In het nieuws/Afbeelding|1)) | Hoofdpagina | 1 segment |
((#TitleParts:Hoofdpagina/In het nieuws/Afbeelding|2)) | Hoofdpagina/In het nieuws | 2 segmenten, te beginnen bij het eerste |
((#TitleParts:Hoofdpagina/In het nieuws/Afbeelding|2|2)) | In het nieuws/Afbeelding | 2 segmenten, te beginnen bij het tweede |
Help
Zie ook
Meta (en)
MediaWiki (en)
Handboeken op Wikibooks