![]() | Let op: Als u deze pagina bewerkt, gaat u akkoord met het vrijgeven van uw bijdragen onder deCC0. ZieHelppagina’s Publiek Domein voor meer informatie. | ![]() |
De extensieParserFunctions zorgt voorextra parserfuncties naast de "magische woorden", die er al waren op MediaWiki.(Hetkan geconfigureerd worden om extra parserfuncties voor tekstbewerking te krijgen; deze functies zijnhier beschreven.)Al deze functies hebben de syntaxis:
{{#functionname:argument 1 |argument 2 |argument 3 ... }}
Type | Operatoren |
---|---|
Groeperen (haakjes) | ( ) |
Nummers | 1234.5 e (2.718) pi (3.142) |
binaire operatore unaire+ ,- | |
Unaire | not ceil trunc floor abs exp ln sin cos tan acos asin atan sqrt |
Binaire | ^ |
* / div mod fmod | |
+ - | |
Afronden | round |
Logica | = != <> > < >= <= |
and | |
or |
Deze functie verwerkt een mathematische expressie en geeft een berekende waarde terug.Deze functie is ook beschikbaar inScribunto met de functiemw.ext.ParserFunctions.expr
.
{{#expr:expressie }}
Basis voorbeeld
{{#expr: 1 + 1}}
→2De beschikbare operatoren worden rechts genoemd, op volgorde van bewerking. LeesManual:Expr parser function syntax voor de functie van elke operator.De nauwkeurigheid en het formaat van het resultaat zal per besturingssysteem (waar de wiki op draait) verschillen, dat is ook afhankelijk van het nummerformaat van de taal van de website.
Bijbooleanse algebra wordt zero omgezet naarfalse
, elke andere waarde wordttrue
:
{{#expr: 1 and -1}}
→1{{#expr: 1 and 0}}
→0{{#expr: 1 or -1}}
→1{{#expr: -1 or 0}}
→1{{#expr: 0 or 0}}
→0Een lege expressie geeft een lege tekst terug. Ongeldige expressies geven een of meerdere foutboodschappen die verwerkt kunnen worden met de functie#iferror
:
{{#expr:}}
→{{#expr: 1+}}
→Expression error: Missing operand for +.{{#expr: 1 =}}
→Expression error: Missing operand for =.{{#expr: 1 foo 2}}
→Expression error: Unrecognized word "foo".De volgorde van operanden is van belang. Een min of plus voor een getal kan als een negatief getal of een positief getal worden gezien, het is dan geen fout in de invoer:
{{#expr: +1}}
→1{{#expr: -1}}
→-1{{#expr: + 1}}
→1{{#expr: - 1}}
→-1NB: bij het gebruik van de uitvoer van magische woorden, moet er een formaataanpassing gedaan worden om komma's te verwijderen en de nummers te vertalen.{{NUMBEROFUSERS}} geeft 18.137.851, waar we 18137851 willen hebben, wat kan worden verkregen met{{formatnum:{{NUMBEROFUSERS}}|R}}
.Dit is vooral van belang bij talen waar getallen worden vertaald.In het Bengaals, wordt {{NUMBEROFUSERS}} dan ৩০,০৬১.
{{#expr:{{NUMBEROFUSERS}}+100}}
→ 118.137{{#expr:{{formatnum:{{NUMBEROFUSERS}}|R}}+100}}
→18137951![]() | De operatormod geeft bij sommige waarden van het tweede argument een verkeerd resultaat:
|
Rounds, het getal wordt links afgerond op een veelvoud van 1/10 verhoogd tot een macht, waarbij de exponent gelijk is aan de afgekapte waarde van het getal rechts.
Om naar boven of naar beneden af te ronden, gebruikt u respectievelijk unaireceil
offloor
.
Testgeval | Resultaat | Afrondingsmethode | ||
---|---|---|---|---|
{{#expr: 1/3 round 5 }} | 0.33333 | Het laatste cijfer is kleiner dan 5, er treedt dus geen duidelijke afronding op. (0.333333… → 0.33333) | ||
{{#expr: 1/6 round 5 }} | 0.16667 | Het laatste cijfer is 5 of hoger, er wordt naar boven afgerond (0.166666… → 0.16667) | ||
{{#expr: 8.99999/9 round 5 }} | 1 | Ook hier wordt het resultaat op het laatste cijfer naar boven afgerond, wat resulteert in extra afronding (0.999998… → 1.00000 → 1) | ||
{{#expr: 1234.5678round -2 }} | 1200 | Afgerond op 100 omdat negatieve waarden links van de komma worden afgerond | ||
{{#expr: 1234.5678round 2 }} | 1234.57 | Afgerond op de dichtstbijzijnde 100e omdat positieve waarden rechts van het decimaalteken worden afgerond | ||
{{#expr: 1234.5678 round 2.3 }} | 1234.57 | Decimalen in de afrondingsindex maken geen verschil in het afgeronde resultaat | ||
{{#expr:trunc 1234.5678 }} | 1234 | Decimaal gedeelte afgekapt | ||
Afronden op het dichtstbijzijnde gehele getal | ||||
{{#expr: 1/3round 0 }} | 0 | Lager tot aan hetdichtstbijzijnde gehele getal, dat nul is | ||
{{#expr: 1/2round 0 }} | 1 | Naar boven tot het dichtstbijzijnde gehele getal, dat 1 is | ||
{{#expr: 3/4round 0 }} | 1 | Naar boven tot het dichtstbijzijnde gehele getal, dat 1 is | ||
{{#expr: -1/3round 0 }} | -0 | Naar boven tot het dichtstbijzijnde gehele getal, dat 0 is | ||
{{#expr: -1/2round 0 }} | -1 | Naar beneden tot het dichtstbijzijnde gehele getal, dat -1 is | ||
{{#expr: -3/4round 0 }} | -1 | Naar beneden tot het dichtstbijzijnde gehele getal, dat -1 is | ||
Afronden naar boven of beneden metceil enfloor | ||||
{{#expr:ceil(1/3) }} | 1 | Tot het volgendehogere gehele getal (1) | ||
{{#expr:floor(1/3) }} | 0 | Lager tot aan hetdichtstbijzijnde gehele getal (0) | ||
{{#expr:ceil(-1/3) }} | -0 | Naar boven tot aan hetdichtstbijzijnde gehele getal (0) | ||
{{#expr:floor(-1/3) }} | -1 | Naar beneden tot het dichtstbijzijnde gehele getal (-1) | ||
{{#expr:ceil 1/3 }} | 0.33333333333333 | Niet afgerond, 1 is al een geheel getal
| ||
Rounding large numbers | ||||
{{#expr: 1e-92 round 400 }} | 1.0E-92 | Afronding op een zeer groot getal leidt tot een oneindig getal. Daarom wordt alleen de oorspronkelijke waarde als antwoord gegeven. | ||
{{#expr: 1e108 round 200 }} | 1.0E+108 | Net als hierboven. |
Expressies werken alleen met getalachtige waarden, ze kunnen geen tekenreeksen of tekens vergelijken.#ifeq kan in plaats daarvan worden gebruikt.
{{#expr: "a" = "a"}}
→Expression error: Unrecognized punctuation character """.{{#expr: a = a}}
→Expression error: Unrecognized word "a".{{#ifeq: a| a| 1| 0}}
→1Deze functie evalueert een testreeks en bepaalt of deze leeg is of niet. Een testreeks die alleen witruimte bevat, wordt als leeg beschouwd.
{{#if: testreeks| waarde als tekstreeks niet leeg is| waarde als tekstreeks leeg is (of alleen witruimte bevat)}}
{{#if: eerste parameter| tweede parameter| derde parameter}}
Deze functie test eerst of de eerste parameter niet leeg is. Als de eerste parameter niet leeg is, geeft de functie het tweede argument weer. Als de eerste parameter leeg is of alleen witruimtetekens bevat (spaties, nieuwe regels, enz.), wordt het derde argument weergegeven.
{{#if:| yes| no}}
→no{{#if: string| yes| no}}
→yes{{#if: | yes| no}}
→yes{{#if:| yes| no}}
→noDe testreeks wordt altijd geïnterpreteerd als pure tekst, dus wiskundige uitdrukkingen worden niet geëvalueerd (zie daarvoor#ifexpr):
{{#if: 1==2| yes| no}}
→yes{{#if: 0| yes| no}}
→yesDe laatste parameter (false) mag worden weggelatenː
{{#if: foo| yes}}
→ yes{{#if:| yes}}
→{{#if: foo|| no}}
→De functie kan genest zijn. Om dit te doen, nest de binnenste#if
-functie in zijn volledige vorm in plaats van een parameter van de omsluitende#if
-functie. Er zijn maximaal zeven niveaus van nesting mogelijk, hoewel dat afhankelijk kan zijn van de wiki of een geheugenlimiet.
{{#if:testreeks|waarde als tekstreeks niet leeg is|{{#if:testreeks|waarde als de teststring niet leeg is|waarde als tekstreeks leeg is (of alleen witruimte bevat)}}}}
U kunt ook een parameter gebruiken als de testreeks in uw#if
-statement. U moet ervoor zorgen dat u de|
(pipe) achter de naam van de variabele toevoegt.(Zodat als de parameter geen waarde heeft, deze wordt geëvalueerd naar een lege tekenreeks in plaats van de tekenreeks "{{{1}}}
".)
{{#if:{{{1|}}}|U hebt tekst ingevoerd in variabele 1|Er is geen tekst in variabele 1}}
BekijkHelp:Parser functions in templates/nl voor meer voorbeelden van het gebruik van deze parserfunctie.
Deze parserfunctie vergelijkt twee invoerreeksen, bepaalt of ze identiek zijn en retourneert een van de twee tekenreeksen op basis van het resultaat.Als er meer vergelijkingen en uitvoerreeksen nodig zijn, kunt u overwegen#switch
te gebruiken.
{{#ifeq:string 1 |string 2 |value if identical |value if different }}
Als beide tekenreeksen geldige numerieke waarden zijn, worden de tekenreeksen numeriek vergeleken:
{{#ifeq: 01| 1| equal| not equal}}
→equal{{#ifeq: 0| -0| equal| not equal}}
→equal{{#ifeq: 1e3| 1000| equal| not equal}}
→equal{{#ifeq:{{#expr:10^3}}| 1000| equal| not equal}}
→equalAnders wordt de vergelijking als tekst gemaakt; Deze vergelijking is hoofdlettergevoelig:
{{#ifeq: foo| bar| equal| not equal}}
→not equal{{#ifeq: foo| Foo| equal| not equal}}
→not equal{{#ifeq: "01"| "1"| equal| not equal}}
→not equal (vergelijk met vergelijkbaar voorbeeld hierboven, zonder de aanhalingstekens){{#ifeq: 10^3| 1000| equal| not equal}}
→not equal (vergelijk met vergelijkbaar voorbeeld hierboven, waarbij#expr
eerst een geldig nummer retourneert)Neem als praktisch voorbeeld een bestaandetemplateTemplate:Timer
met behulp van de parser om te kiezen tussen twee standaardtijden, kort en lang.Het neemt de parameter als eerste invoer om te vergelijken met de tekenreeks "short" - er is geen conventie voor de volgorde, maar het is eenvoudiger te lezen als de parameter als eerste gaat.De sjablooncode wordt gedefinieerd als:
{{#ifeq:{{{1|}}}| short| 20| 40}}
Het volgende volgt:
{{timer|short}}
→20{{timer|20}}
→40{{timer}}
→40![]() | Bij gebruik binnen een parserfunctie moeten alle parsertags en andere parserfuncties tijdelijk worden vervangen dooreen unieke code. Dit is van invloed op vergelijkingen:
|
![]() | Letterlijke vergelijkingen metpaginanaam, magische woorden kunnen mislukken, afhankelijk van de siteconfiguratie. Zo kan {{FULLPAGENAME}}, afhankelijk van wiki, de eerste letter met een hoofdletter schrijven en alle onderstrepingstekens vervangen door spaties. Om dit te omzeilen, past u het magische woord toe op beide parameters:
|
Deze functie neemt een invoerreeks en retourneert een van de twee resultaten; de functie evalueerttrue
of de invoerreeks een HTML-object metclass="error"
bevat, zoals gegenereerd door andere parserfuncties zoals#expr
,#time
en $rel 2abs,sjabloon fouten zoals loops en recursies, en andere "failsoft" parserfouten.
{{#iferror:test string |value if error |value if correct }}
Een of beide retourreeksen kunnen worden weggelaten. Als de tekenreekscorrect
wordt weggelaten, wordt detest string
geretourneerd als deze niet onjuist is. Als de tekenreekserror
ook wordt weggelaten, wordt een lege tekenreeks geretourneerd bij een fout :
{{#iferror:{{#expr: 1 + 2}}| error| correct}}
→correct{{#iferror:{{#expr: 1 + X}}| error| correct}}
→error{{#iferror:{{#expr: 1 + 2}}| error}}
→3{{#iferror:{{#expr: 1 + X}}| error}}
→error{{#iferror:{{#expr: 1 + 2}}}}
→3{{#iferror:{{#expr: 1 + X}}}}
→{{#iferror:{{#expr: .}}| error| correct}}
→correct{{#iferror:<strongclass="error">a</strong>| error| correct}}
→errorSommige fouten kunnen leiden tot het toevoegen van een trackingcategorie, dit toevoegen kan niet met behulp van{{#iferror:}}
worden onderdrukt.
Deze functie evalueert een wiskundige expressie en retourneert een van de twee tekenreeksen, afhankelijk van de booleaanse waarde van het resultaat:
{{#ifexpr:expression |value if true |value if false }}
De invoerexpression
wordt precies zo geëvalueerd als voor#expr
hierboven, waarbij dezelfde operatoren beschikbaar zijn. De uitvoer wordt vervolgens geëvalueerd als een booleaanse expressie.
Een lege invoerexpressie evalueert naarfalse
:
{{#ifexpr:| yes| no}}
→noZoals hierboven vermeld, evalueert nul naarfalse
en elke niet-nulwaarde evalueert naartrue
, dus deze functie is gelijk aan één die alleen#ifeq
en#expr
gebruikt:
{{#ifeq: {{#expr:expression }} | 0 |value if false |value if true }}
behalve voor een lege of verkeerde invoerexpressie (een foutmelding wordt behandeld als een lege tekenreeks; deze is niet gelijk aan nul, dus we krijgenvalue if true
).
{{#ifexpr: =| yes| no}}
→Expression error: Unexpected = operator.vergelijken
{{#ifeq:{{#expr: =}}| 0| no| yes}}
→ yesEen of beide retourwaarden kunnen worden weggelaten; Er wordt geen uitvoer gegeven wanneer de juiste tak leeg is:
{{#ifexpr: 1 > 0| yes}}
→yes{{#ifexpr: 1 < 0| yes}}
→{{#ifexpr: 0 = 0| yes}}
→ yes{{#ifexpr: 1 > 0|| no}}
→{{#ifexpr: 1 < 0|| no}}
→ no{{#ifexpr: 1 > 0}}
→De Booleaanse operatoren voor gelijk en ongelijk worden ondersteund.
{{#ifexpr: 0 = 0 or 1 = 0| yes}}
→yes{{#ifexpr: 0 = 0 and 1 = 0|| no}}
→no{{#ifexpr: 2 > 0 or 1 < 0| yes}}
→yes{{#ifexpr: 2 > 0 and 1 > 0| yes| no}}
→yes![]() | De resultaten van numerieke vergelijkingen met#ifexpr komen niet altijd overeen met die van#ifeq en#switch . Deze laatste twee zijn nauwkeuriger dan#ifexpr en leveren dus mogelijk geen gelijkwaardige resultaten op.Beoordeel deze vergelijkingen met het laatste cijfer gewijzigd:
Omdat PHP die in
Bij het andere cijfer is het resultaat van gelijk eigenlijk onjuist. Dit gedrag in#ifexpr wordt veroorzaakt doordat MediaWiki letterlijke getallen in expressies omzet in type float, wat voor grote gehele getallen als deze afronding met zich meebrengt. |
Deze functie neemt een invoerreeks, interpreteert deze als een paginatitel en retourneert een van de twee waarden, afhankelijk van het feit of de pagina al dan niet op de lokale wiki bestaat.
{{#ifexist:page title |value if exists |value if doesn't exist }}
De functie evalueert naartrue
als de pagina bestaat, of deze inhoud bevat, zichtbaar leeg is (metagegevens bevat zoals categoriekoppelingen ofmagische woorden, maar geen zichtbare inhoud), leeg is of eendoorverwijzing is. Alleen pagina's met een rode link worden beoordeeld opfalse
, ook als de pagina bestond maar is verwijderd.
{{#ifexist: Help:Extension:ParserFunctions/nl | exists | doesn't exist }}
→exists{{#ifexist: XXHelp:Extension:ParserFunctions/nlXX | exists | doesn't exist }}
→doesn't existDe functie evalueert naartrue
voorsysteemberichten die zijn aangepast en voorspeciale pagina's die door de software zijn gedefinieerd.
{{#ifexist: Special:Watchlist | exists | doesn't exist }}
→exists{{#ifexist: Special:CheckUser | exists | doesn't exist }}
→exists (omdat de extensieCheckuser op deze wiki is geïnstalleerd){{#ifexist: MediaWiki:Copyright | exists | doesn't exist }}
→doesn't exist (omdatMediaWiki:Copyright niet is aangepast)Voor Mediawiki 1.45, als een pagina een doel controleert met#ifexist:
, wordt die pagina weergegeven in deSpecial:WhatLinksHere-lijst voor de doelpagina.Dus als de code{{#ifexist:Foo }}
op deze pagina is opgenomen (Help:Extension:ParserFunctions/nl), zalSpecial:WhatLinksHere/Foo Help:Extension:ParserFunctions/nl vermelden.
Op wiki's die een gedeelde repository voor de media gebruiken, kan#ifexist:
worden gebruikt om te controleren of een bestand is geüpload naar de repository, maar niet naar de wiki zelf:
{{#ifexist: File:Example.png | exists | doesn't exist }}
→doesn't exist{{#ifexist: Image:Example.png | exists | doesn't exist }}
→doesn't exist{{#ifexist: Media:Example.png | exists | doesn't exist }}
→existsAls er een lokale beschrijvingspagina voor het bestand is gemaakt, is het resultaatbestaat voor al het bovenstaande.
#ifexist:
werkt niet met interwikilinks.
#ifexist:
wordt beschouwd als een "dure parserfunctie"; Slechts een beperkt aantal daarvan kan op één pagina worden opgenomen (inclusief functies in transclude sjablonen).Als deze limiet wordt overschreden, retourneren alle daaropvolgende#ifexist:
-functies automatisch false, ongeacht of de doelpagina bestaat of niet, en wordt de pagina gecategoriseerd inCategory:Pages with too many expensive parser function calls.De naam van devolgende categorie kan variëren afhankelijk van de taal van uw wiki.
Voor sommige testgevallen is het mogelijk om het ifexist effect te emuleren met css, door gebruik te maken van de selectorsa.new
(om links naar niet-bestaande pagina's te selecteren) ofa:not(.new)
(om links naar bestaande pagina's te selecteren).Bovendien, aangezien het aantal dure parserfuncties dat op een enkele pagina kan worden gebruikt, wordt beheerd door$wgExpensiveParserFunctionLimit
, kan men ook de limiet in LocalSettings.php verhogen.
Voor Mediawiki 1.45, een pagina die niet bestaat en is getest op het gebruik van #ifexist, komt terecht op deGewenste pagina's.ZieT14019 voor de reden, en eentijdelijke oplossing.
Deze functie converteert een relatief bestandspad naar een absoluut bestandspad.
{{#rel2abs:path }}
{{#rel2abs:path |base path }}
Binnen depath
-invoer is de volgende syntaxis geldig:
.
→ het huidige niveau..
→ ga een niveau hoger/foo
→ ga een niveau lager naar de submap /fooAls debase path
niet is opgegeven, wordt in plaats daarvan de volledige paginanaam van de pagina gebruikt:
{{#rel2abs: /quok | Help:Foo/bar/baz }}
→Help:Foo/bar/baz/quok{{#rel2abs: ./quok | Help:Foo/bar/baz }}
→Help:Foo/bar/baz/quok{{#rel2abs: ../quok | Help:Foo/bar/baz }}
→Help:Foo/bar/quok{{#rel2abs: ../. | Help:Foo/bar/baz }}
→Help:Foo/barOngeldige syntaxis, zoals/.
of/./
, wordt genegeerd.Aangezien er niet meer dan twee opeenvolgende volledige stops zijn toegestaan, kunnen reeksen zoals deze worden gebruikt om opeenvolgende instructies te scheiden:
{{#rel2abs: ../quok/. | Help:Foo/bar/baz }}
→Help:Foo/bar/quok{{#rel2abs: ../../quok | Help:Foo/bar/baz }}
→Help:Foo/quok{{#rel2abs: ../../../quok | Help:Foo/bar/baz }}
→quok{{#rel2abs: ../../../../quok | Help:Foo/bar/baz }}
→Fout: ongeldige diepte in pad: "Help:Foo/bar/baz/../../../../quok" (probeerde een node boven de stamnode aan te roepen).Voor een vergelijkbare groep functies zie ook Bij de Magische woorden de URL-gegevens.Interne parserfuncties bevatten: 'localurl:', 'fullurl:', 'anchorencode:' enz.
Zie ook:w:Help:Switch parser function
Deze functie vergelijkt één invoerwaarde met verschillende testgevallen en retourneert een gekoppelde tekenreeks als er een overeenkomst wordt gevonden.
{{#switch:comparison string |case =result |case =result |... |case =result |default result}}
Voorbeelden:
{{#switch: baz| foo= Foo| baz= Baz| Bar}}
→ Baz{{#switch: foo| foo= Foo| baz= Baz| Bar}}
→ Foo{{#switch: zzz| foo= Foo| baz= Baz| Bar}}
→ Bar#switch met gedeeltelijke transclusie-tags kan van invloed zijn op een configuratiebestand waarmee een editor die niet bekend is met sjablooncodering configureerbare elementen kan bekijken en bewerken.
Hetstandaardresultaat
wordt geretourneerd als er geencase
tekenreeks overeenkomt met devergelijkingsreeks
:
{{#switch: test| foo= Foo| baz= Baz| Bar}}
→ BarIn deze syntaxis moet het standaardresultaat de laatste parameter zijn en mag het geen onbewerkt gelijkteken bevatten (een gelijkteken zonder{{}}
).Als dit wel het geval is, wordt het behandeld als een vergelijking en wordt er geen tekst weergegeven als er geen gevallen overeenkomen.Dat komt omdat de standaardwaarde niet is gedefinieerd (leeg is).Als er een case echter overeenkomt, wordt de bijbehorende tekenreeks geretourneerd.
{{#switch: test| Bar| foo= Foo| baz= Baz}}
→{{#switch: test| foo= Foo| baz= Baz| B=ar}}
→{{#switch: test| test= Foo| baz= Baz| B=ar}}
→ FooAls alternatief kan het standaardresultaat expliciet worden aangegeven met eencase
string van "#default
".
{{#switch:comparison string |case =result |case =result |... |case =result | #default =default result}}
Standaardresultaten die op deze manier zijn gedeclareerd, kunnen overal in de functie worden geplaatst:
{{#switch: test| foo= Foo| #default= Bar| baz= Baz}}
→ BarAls de parameterdefault
wordt weggelaten en er geen overeenkomst wordt gemaakt, wordt er geenresult
geretourneerd:
{{#switch: test| foo= Foo| baz= Baz}}
→Het is mogelijk om 'doorval'-waarden te hebben, waarbij meerderecase
tekenreeksen dezelfderesult
tekenreeks retourneren. Dit minimaliseert dubbel werk.
{{#switch:comparison string |case1 =result1 |case2 |case3 |case4 =result234 |case5 =result5 |case6 |case7 =result67 | #default =default result}}
Hier wordt bij 2, 3 en 4 allemaalresult234
terug; Bij 6 en 7 is het resultaatresult67
.De "#default =
" in de laatste parameter kan in het bovenstaande geval worden weggelaten.
De functie kan worden gebruikt met parameters als testreeks.In dit geval is het niet nodig om de 'pipe' achter de parameternaam te plaatsen, omdat het zeer onwaarschijnlijk is dat u ervoor kiest om iets in te stellen voor de tekenreeks "{{{parameter name}}}
".(Dit is de waarde die de parameter standaard heeft als de 'pipe' afwezig is en de parameter niet bestaat of een waarde heeft.ZieHelp:Parser functions in templates/nl.)
{{#switch:{{{1}}}| foo= Foo| baz= Baz| Bar}}
In het bovenstaande geval, als{{{1}}}
gelijk is aanfoo
, retourneert de functieFoo
.Als het gelijk is aanbaz
, retourneert de functieBaz
.Als de parameter leeg is of niet bestaat, retourneert de functieBar
.
Net als in het bovenstaande gedeelte kunnen gevallen worden gecombineerd om één resultaat te geven.
{{#switch:{{{1}}}| foo| zoo| roo= Foo| baz= Baz| Bar}}
Hier, als{{{1}}}
gelijk is aanfoo
,zoo
ofroo
, retourneert de functieFoo
.Als het gelijk is aanbaz
, retourneert de functieBaz
.Als de parameter leeg is of niet bestaat, retourneert de functieBar
.
Bovendien kan het standaardresultaat worden weggelaten als u niets wilt retourneren als de waarde van de testparameter niet overeenkomt met een van de gevallen.
{{#switch:{{{1}}}| foo= Foo| bar= Bar}}
In dit geval retourneert de functie een lege tekenreeks, tenzij{{{1}}}
bestaat en gelijk is aanfoo
ofbar
, in welk geval het respectievelijkFoo
ofBar
retourneert.
Dit heeft hetzelfde effect als het standaardresultaat als leeg verklaren.
{{#switch:{{{1}}}| foo| zoo| roo= Foo| baz= Baz|}}
Als u om de een of andere reden besluit een case in te stellen als "{{{parameter name}}}
", retourneert de functie het resultaat van die case wanneer de parameter niet bestaat of geen waarde heeft.De parameter moet bestaan en een andere waarde hebben dan de tekenreeks "{{{parameter name}}}
" om het standaardresultaat van de functie te retourneren.
{{{1}}}
niet bestaat of leeg is):{{#switch:{{{1}}}|{{{1}}} = Foo| baz= Baz| Bar}}
→ Foo{{{1}}}
de waarde "test
" heeft):{{#switch:{{{1}}}|{{{1}}} = Foo| baz= Baz| Bar}}
→ Bar{{{1}}}
de waarde "{{{1}}}
" heeft):{{#switch:{{{1}}}|{{{1}}} = Foo| baz= Baz| Bar}}
→ FooIn dit hypothetische geval zou u de 'pipe' aan de parameter moeten toevoegen ({{{1|}}}
).
Net als bij#ifeq
wordt de vergelijking numeriek gemaakt als zowel de vergelijkingsreeks als de string die wordt getest numeriek zijn; of als een hoofdlettergevoelige tekenreeks:
{{#switch: 0 + 1| 1= one| 2= two| three}}
→three{{#switch:{{#expr: 0 + 1}}| 1= one| 2= two| three}}
→one{{#switch: 02| +1= one| +2= two| three}}
→two{{#switch: 100| 1e1= ten| 1e2= hundred| other}}
→hundred{{#switch: a| a= A| b= B| C}}
→A{{#switch: A| a= A| b= B| C}}
→CEencase
string kan leeg zijn:
{{#switch:|= Nothing| foo= Foo| Something}}
→NothingZodra een match is gevonden, worden volgendecases
genegeerd:
{{#switch: b| f= Foo| b= Bar| b= Baz|}}
→Bar![]() | Numerieke vergelijkingen met#switch en#ifeq zijn niet gelijk aan vergelijkingen in uitdrukkingen (zie ook hierboven):
|
"Case"-tekenreeksen mogen geen onbewerkte gelijktekenstekens bevatten. Om dit te omzeilen, gebruikt u het magische woord{{=}} of vervangt u het gelijkteken door HTML-code=
.
Voorbeeld:
U typt | U krijgt |
---|---|
{{#switch: 1=2| 1=2 = raw| 1<nowiki>=</nowiki>2 = nowiki| 1{{=}}2 = template| default}} | template |
{{#switch: 1=2| 1=2= html| default}} | html |
#switch
kan worden gebruikt om deexpansiediepte te beperken.
Bijvoorbeeld:
{{#switch:{{{1}}}|condition1=branch1|condition2=branch2|condition3=branch3|branch4}}
is gelijk aan
{{#ifeq:{{{1}}}|condition1|branch1|{{#ifeq:{{{1}}}|condition2|branch2|{{#ifeq:{{{1}}}|condition3|branch3|branch4}}}}}}
d.w.z. diep nestelen, lineair:
{{#ifeq:{{{1}}}|condition1|<!--then-->branch1|<!--else-->{{#ifeq:{{{1}}}|condition2|<!--then-->branch2|<!--else-->{{#ifeq:{{{1}}}|condition3|<!--then-->branch3|<!--else-->branch4}}}}}}
Aan de andere kant kan de vervanging van de schakelaar ingewikkeld / onpraktisch zijn voor IF's die in beide takken zijn genest (weergegeven met alternatieven voor inspringing, aan beide zijden ingesprongen), waardoor een volledige symmetrische boom ontstaat:
{{#ifeq:{{{1}}}|condition1|<!--then-->branch1t{{#ifeq:{{{1}}}|condition2|<!--then-->branch1t2t{{#ifeq:{{{1}}}|condition4|<!--then-->branch1t2t4t|<!--else-->branch1t2t4e}}|<!--else-->branch1t2e{{#ifeq:{{{1}}}|condition5|<!--then-->branch1t2e5t|<!--else-->branch1t2e5e}}}}|<!--else-->branch1e{{#ifeq:{{{1}}}|condition3|<!--then-->branch1e3t{{#ifeq:{{{1}}}|condition6|branch1e3t6t|branch1e3t6e}}|<!--else-->branch1e3e{{#ifeq:{{{1}}}|condition7|branch1e3e7t|branch1e3e7t}}}}}}
Code | Beschrijving | Huidige uitvoer (De cache van deze pagina leegmaken om bij te werken) |
---|---|---|
Jaar | ||
Y | Jaar met vier cijfers. | 2025 |
y | Jaar met twee cijfers. | 25 |
L | 1 als het een schrikkeljaar is, anders 0. | 0 |
o [note 1] | ISO-8601 jaar van de gespecificeerde week.[note 2] | 2025[note 3] |
Maand | ||
n | Maandnummer, zonder nul vooraan. | 7 |
m | Maandnummer, met nul vooraan. | 07 |
M | Afkorting van de maand, in de taal van de website. | jul |
F | De volledige maand, in de taal van de website. | juli |
xg | Geeft de volledige maandnaam in het formuliergenitive voor sitetalen die onderscheid maken tussen genitief ennominatief formulieren. Deze optie is handig voor veelSlavische talen zoals Pools, Russisch, Wit-Russisch, Tsjechisch, Slowaaks, Sloveens, Oekraïens, enz. | In het Pools:{{#time:F Y|June 2010|pl}} → czerwiec 2010(nominatief) {{#time:d xg Y|20 June 2010|pl}} → 20 czerwca 2010(genitief) |
Dag van de maand of het jaar | ||
j | Dag van de maand (met nul vooraan) | 18 |
d | Dag van de maand (met nul vooraan) | 18 |
z | Dag van het jaar (1 januari = 0).![]() | 198 |
Week en dag van de week | ||
W | ISO 8601 weeknummer, met nul vooraan. | 29 |
N | ISO 8601 dag van de week (maandag = 1, zondag = 7). | 5 |
w | Nummer van de dag van de week (zondag = 0, zaterdag = 6). | 5 |
D | Een afkorting voor de dag van de week. Niet vaak geïnternationaliseerd. | vr |
l | De volledige doordeweekse naam. Niet vaak geïnternationaliseerd. | vrijdag |
Uur | ||
a | "vm" 00:00:00 → 11:59:59, "nm" 12:00:00 → 23:59:59. | pm |
A | Versie vana hierboven in hoofdletters. | PM |
g | Uur in 12-uurs formaat, zonder nul vooraan | 4 |
h | Uur in 12-uurs formaat, met nul vooraan | 04 |
G | Uur in 24-uurs formaat, zonder nul vooraan | 16 |
H | Uur in 24-uurs formaat, met nul vooraan | 16 |
Minuten en seconden | ||
i | Minuten na het uur, met voorloopnul | 21 |
s | Seconden na de minuut, met voorloopnul | 03 |
U | Unix tijd. Seconden na 1 januari 1970 00:00:00 GMT. | 1752855663 |
Tijdzone (vanaf1.22wmf2) | ||
e | Tijdzone-id | UTC |
I | Of de datum wel of niet in de zomertijd valt. | 0 |
O | Verschil met de Greenwich tijd (GMT) | +0000 |
P | Verschil met de Greenwich tijd (GMT), met dubbele punt | +00:00 |
T | Tijdzone afkorting | UTC |
Z | Tijdzone offset in seconden. | 0 |
Diversen | ||
t | Aantal dagen in de huidige maand. | 31 |
c | ISO 8601 geformatteerde datum, gelijkwaardig aanY-m-d"T"H:i:s+00:00 . | 2025-07-18T16:21:03+00:00 |
r | RFC 5322 geformatteerde datum, gelijk aanD, j M Y H:i:s +0000 , met weekdagnaam en maandnaam niet geïnternationaliseerd. | Fri, 18 Jul 2025 16:21:03 +0000 |
Niet-Gregoriaanse kalenders | ||
Islamitisch | ||
xmj | Dag van de maand. | 22 |
xmF | Volledige maandnaam. | Muharram |
xmn | Maandnummer. | 1 |
xmY | Volledig jaar. | 1447 |
Iraans (Jalaly) | ||
xit | Aantal dagen in de maand. | 31 |
xiz | Dag van het jaar. | 119 |
xij | Dag van de maand. | 27 |
xiF | Volledige maandnaam. | Vierde Perzische maand |
xin | Maandnummer. | 4 |
xiY | Volledig jaar. | 1404 |
xiy | Jaar in twee cijfers. | 04 |
Hebreeuws | ||
xjj | Dag van de maand. | 22 |
xjF | Volledige maandnaam. | Tamuz |
xjt | Aantal dagen in de maand. | 29 |
xjx | Genitieve vorm van de maandnaam. | Tamuz |
xjn | Maand nummer. | 10 |
xjY | Volledig jaar. | 5785 |
Thais zonne | ||
xkY | Volledig jaar inThaise zonnekalender![]() | 2568 |
Minguo/Juche jaar | ||
xoY | Volledig jaar. | 114 |
Japanse nengo | ||
xtY | Volledig jaar. | 令和7 |
Vlaggen | ||
xn | De volgende numerieke code opmaken als een onbewerkt ASCII-nummer | In de Hindi-taal produceert{{#time:H, xnH}} ०६, 06. |
xN | Alsxn , maar dan als een vaste vlag, die blijft bestaan tot het einde van de string of tot het volgende voorkomen vanxN in de string. | |
xr | Maak het volgende getal op als een Romeins cijfer. Werkt alleen voor getallen tot 10.000 (tot 3.000 in pre MediaWiki 1.20). | {{#time:xrY}} → MMXXV |
xh | Maak het volgende getal op als een Hebreeuws cijfer. | {{#time:xhY}} → ב'כ"ה |
Deze parserfunctie neemt een datum en/of tijd (in de Gregoriaanse kalender) en maakt deze op volgens de gegeven syntaxis. Er kan een datum/tijd-object worden opgegeven; de standaardwaarde is de waarde van het{{CURRENTTIMESTAMP}}
magische woord, dat wil zeggen het tijdstip waarop de pagina voor het laatst in HTML is weergegeven.
{{#time:format string }}
{{#time:format string |date/time object }}
{{#time:format string |date/time object |language code }}
{{#time:format string |date/time object |language code |local }}
De lijst met geaccepteerde opmaakcodes wordt gegeven in de tabel aan de rechterkant.Elk teken in de opmaaktekenreeks dat niet wordt herkend, wordt ongewijzigd doorgegeven. Dit geldt ook voor lege ruimtes (het systeem heeft ze niet nodig voor het interpreteren van de codes).Als er geen teken wordt herkend in de opmaaktekenreeks en het datum-/tijdobject geen fouten bevat, wordt de opmaaktekenreeks geretourneerd als uitvoer.Er zijn ook twee manieren om te ontsnappen aan tekens in de opmaakreeks:
Bovendien worden de twee tekensxx
geïnterpreteerd als een enkele letterlijke "x".
Naarmate de lijst met opmaakcodes blijft evolueren (met de ondersteuning van nieuwe kalenders of van nieuwe datumvelden die anders zijn berekend en opgemaakt), moet u zorgen dat alle letterlijke tekens (niet alleen ASCII-letters die momenteel worden gebruikt door opmaakcodes) ongewijzigd worden doorgegeven als het dus niet als opmaak bedoeld is.
Helaas wordt het enkele citaat van ASCII voorlopig nog steeds niet herkend als een eenvoudig alternatief voor het markeren van letterlijke tekst voor de momenteel ondersteunde dubbele ASCII-aanhalingstekens (dubbele aanhalingstekens zijn bijvoorbeeld verplicht voor andere toepassingen, zoals de afbakening van tekenreekswaarden in JSON, C, C ++...) en backslashes (die ook moeten worden ontsnapt in tekenreeksconstanten die door veel talen worden gebruikt, waaronder JSON, C, C++, PHP, JavaScript, Lua).U kunt dus nog steeds geen letterlijk dubbel citaat insluiten zonder het te markeren met een backslash (of u kunt in plaats daarvan andere krullende, hoekige of vierkante aanhalingstekens gebruiken).
{{#time: Y-m-d}}
→2025-07-18{{#time:[[Y]] m d}}
→2025 07 18{{#time:[[Y (year)]]}}
→2025 (25UTCpmFri, 18 Jul 2025 16:21:03 +0000){{#time:[[Y "(year)"]]}}
→2025 (year){{#time: i's"}}
→21'03"Hetdate/time object
kan in elk formaat zijn dat door PHP'sstrtotime() functie wordt geaccepteerd.Absolute (bijv.20 December 2000
), relatieve (bijv.+20 hours
) en gecombineerde tijden (bijv.30 July +1 year
) worden geaccepteerd.
{{#time: r|now}}
→Fri, 18 Jul 2025 16:21:04 +0000{{#time: r|+2 hours}}
→Fri, 18 Jul 2025 18:21:04 +0000{{#time: r|now + 2 hours}}
→Fri, 18 Jul 2025 18:21:04 +0000{{#time: r|20 December 2000}}
→Wed, 20 Dec 2000 00:00:00 +0000{{#time: r|December 20, 2000}}
→Wed, 20 Dec 2000 00:00:00 +0000{{#time: r|2000-12-20}}
→Wed, 20 Dec 2000 00:00:00 +0000{{#time: r|2000 December 20}}
→Fout: ongeldige tijd.{{#time: r|last tuesday}}
→Tue, 15 Jul 2025 00:00:00 +0000Delanguage code
inISO 639-3 (?) maakt het mogelijk om de string in de gekozen taal weer te geven
{{#time:d F Y|1988-02-28|nl}}
→28 februari 1988{{#time:l|now|uk}}
→п'ятниця{{#time:d xg Y|20 June 2010|pl}}
→20 czerwca 2010De parameterlocal
geeft aan of hetdate/time object verwijst naar de lokale tijdzone of naar UTC.
Dit is een booleaanse parameter: de waarde ervan wordt bepaald door de waarde van het argument te casten (zie deofficiële PHP-documentatie voor details over hoe tekenreeksen worden gegoten naar booleaanse waarden).
$wgLocaltimezone
is ingesteld opUTC
, er geen verschil is in de uitvoer wanneerlocal
is ingesteld optrue
offalse
.Zie de volgende voorbeelden voor meer informatie:
{{#time: Y F d H:i:s|now|it|0}}
→2025 luglio 18 16:21:04{{#time: Y F d H:i:s|now|it|1}}
→2025 luglio 18 16:21:04{{#time: Y F d H:i:s|+2 hours||0}}
→2025 juli 18 18:21:04{{#time: Y F d H:i:s|+2 hours||1}}
→2025 juli 18 18:21:04{{#time:c|2019-05-16T17:05:43+02:00|it}}
→2019-05-16T15:05:43+00:00{{#time:c|2019-05-16T17:05:43+02:00|it|0}}
→2019-05-16T15:05:43+00:00{{#time:c|2019-05-16T17:05:43+02:00|it|true}}
→2019-05-16T15:05:43+00:00Als u een Unix-tijdstempel hebt berekend, kunt u deze gebruiken in datumberekeningen door er een symbool@
voor te zetten.
{{#time: U| now}}
→1752855664{{#time: r | @1752855663 }}
→Fri, 18 Jul 2025 16:21:03 +0000![]() | Zonder@ vóór numerieke tijdstempelwaarden is het resultaat meestal een fout of een onverwachte waarde:
|
![]() | Het bereik van de invoer is 1 januari 0111 → 31 december 9999. Voor de jaren 100 tot en met 110 is de uitvoer inconsistent, Y en schrikkeljaren zijn als de jaren 100-110, r, D, l en men interpreteert deze jaren als 2000-2010.
Jaarnummers 0-99 worden geïnterpreteerd als 2000-2069 en 1970-1999, behalve wanneer geschreven in 4-cijferige notatie met voorloopnullen:
|
Er kunnen volledige of gedeeltelijke absolute data worden opgegeven; De functie zal delen van de datum "invullen" die niet zijn opgegeven met behulp van dehuidige waarden:
{{#time: Y| January 1}}
→2025![]() | De invulfunctie is niet consistent; Sommige delen worden ingevuld met de huidige waarden, andere niet:
Er is een uitzondering van de gevulde dag:
|
Een viercijferig getal wordt altijd geïnterpreteerd als een jaar, nooit als uren en minuten: Vóórr86805 in 2011 was dit niet het geval.
{{#time: Y m d H:i:s| 1959}}
→1959 07 18 00:00:00Een getal van zes cijfers wordt geïnterpreteerd als uren, minuten en seconden indien mogelijk, maar verder als een fout (bijvoorbeeld niet als een jaar en maand):
{{#time: Y m d H:i:s| 195909}}
→2025 07 18 19:59:09 Invoer wordt behandeld als een tijd in plaats van een code voor een jaar + maand.{{#time: Y m d H:i:s| 196009}}
→Fout: ongeldige tijd. Hoewel 19:60:09 geen geldige tijd is, wordt 196009 niet geïnterpreteerd als september 1960.De functie voert een bepaalde hoeveelheid datumwiskunde uit:
{{#time: d F Y| January 0 2008}}
→31 december 2007{{#time: d F| January 32}}
→Fout: ongeldige tijd.{{#time: d F| February 29 2008}}
→29 februari{{#time: d F| February 29 2007}}
→01 maart{{#time:Y-F|now -1 months}}
→2025-juniDe totale lengte van de opmaakreeksen van de aanroepen van#time
is beperkt tot 6000 tekens[1]
Er is een bug in deze #time parserfunctie (meer specifiek inPHP DateTime) die het doorgeven vanniet-gehele getallen als relatieve tijdzone-verschuivingen niet toestaat. Dit probleem is niet van toepassing bij het gebruik van een tijdzone op het uur, zoals EDT. Bijvoorbeeld:
{{#time:g:i A| -4 hours}}
→ 12:21 PMIndia bevindt zich echter op een tijdverschuiving van +5,5 uur ten opzichte van UTC en dus zal het gebruik van zijn tijdzone normaal gesproken niet de juiste berekening van een relatieve tijdzone-offset mogelijk maken. Dit is wat er gebeurt:
{{#time:g:i A| +5.5 hours}}
→ 4:21 PMU kunt dit probleem omzeilen door de tijd als volgt om te zetten in minuten of seconden:
{{#time:g:i A| +330 minutes}}
→ 9:51 PM{{#time:g:i A| +19800 seconds}}
→ 9:51 PM(Tim Starling, de ontwikkelaar van deze functie, leverde de exacte syntaxis voor deze oplossing.)
Soms is het handig om een tijdstempel te maken, die eruitziet als het automatische tijdstempel dat wordt gegenereerd doorhandtekeningen in discussies op overlegpagina's.Op een wiki in de Engelse taal kan het worden gemaakt met:
{{#timel:H:i, j xg Y (e)|+330 minutes}}
→ 21:51, 18 juli 2025 (UTC)Deze functie is een snelkoppeling die identiek is aan{{#time: ... }}
, waarbij de parameterlocal
is ingesteld optrue
, dus het gebruikt altijd de lokale tijdzone van de gebruiker of die van de wiki (zoals ingesteld in$wgLocaltimezone).
Syntaxis van de functie:
{{#timel:format string }}
{{#timel:format string |date/time object }}
{{#timel:format string |date/time object |language code }}
$wgLocaltimezone
is ingesteld opUTC
, er geen verschil is in de uitvoer wanneerlocal
is ingesteld optrue
offalse
.Zie daarvan de volgende voorbeeldenː
{{#time:c|now|it}}
→2025-07-18T16:21:04+00:00{{#time:c|now|it|0}}
→2025-07-18T16:21:04+00:00{{#time:c|now|it|1}}
→2025-07-18T16:21:04+00:00{{#timel:c|now|it}}
→2025-07-18T16:21:04+00:00![]() | Houd er rekening mee dat voor zowel time als time1 hetzelfde aantal seconden retourneert sinds 1970-01-01 00:00:00 UTC op Wikipedia's met andere tijdzones dan UTC (voorheen bekend als GMT)
|
Deze functie formatteert een datum met behulp van een standaardformaat voor de geselecteerde taal, zoals gedefinieerd in$dateFormats
(zieT223772).
{{#timef:date/time object }}
{{#timef:date/time object |formaattype }}
{{#timef:date/time object |formaattype |taalcode }}
Het formaat van het objectdate/time is hetzelfde als voor#time. Als het leeg is, wordt de tijd gebruikt waarop de pagina is opgebouwd.
Hetformaattype kan een van de volgende zijn:
time
date
both
pretty
Als hetformaattype niet is opgegeven, worden zowel de tijd als de datum weergegeven, alsofboth
is opgegeven.
Als detaalcode niet is opgegeven, wordt de taal van de pagina-inhoud gebruikt.
Met#timef
in plaats van#time
kunnen sjablonen meer talen gemakkelijk ondersteunen, omdat verschillende talen verschillende manieren hebben om datums te formatteren.
In het Engels wordt de volgorde van dag en maand bepaald met$wgAmericanDates
.
Voorbeelden:
{{#timef:now|both|en}}
→ 16:21, 18 July 2025{{#timef:now|both|ja}}
→ 2025年7月18日 (金) 16:21{{#timef:now|pretty|en}}
→ 18 July{{#timef:now|pretty|pl}}
→ 18 lipca{{#timef:|time}}
→ 16:21Deze functie is hetzelfde als#timef behalve dat het de lokale tijdszone van de wiki wordt gebruikt zoals geconfigureerd in$wgLocaltimezone.
{{#timefl:date/time object }}
{{#timefl:date/time object |format type }}
{{#timefl:date/time object |format type |language code }}
Deze functie scheidt een paginatitel in segmenten op basis van schuine strepen en retourneert vervolgens enkele van die segmenten als uitvoer.
{{#titleparts:paginanaam |aantal te retourneren segmenten |eerste te retourneren segment }}
Als de parameteraantal te retourneren segmenten niet is opgegeven, wordt standaard "0" ingesteld, waarmee alle segmenten van heteerste segment dat moet worden geretourneerd (inbegrepen) worden geretourneerd. Als de parametereerste te retourneren segment niet is opgegeven of "0" is, wordt standaard "1" gebruikt:
{{#titleparts:Talk:Foo/bar/baz/quok }}
→Talk:Foo/bar/baz/quok{{#titleparts:Talk:Foo/bar/baz/quok | 1 }}
→Talk:Foo Zie ook {{ROOTPAGENAME}}.{{#titleparts:Talk:Foo/bar/baz/quok | 2 }}
→Talk:Foo/bar{{#titleparts: Talk:Foo/bar/baz/quok | 2 | 2 }}
→bar/baz{{#titleparts: Talk:Foo/bar/baz/quok | 2 | 3 }}
→baz/quok{{#titleparts: Talk:Foo/bar/baz/quok | 3 | 2 }}
→bar/baz/quok{{#titleparts: Talk:Foo/bar/baz/quok | | 2 }}
→bar/baz/quok{{#titleparts: Talk:Foo/bar/baz/quok | | 5 }}
→Voor beide waarden worden negatieve waarden geaccepteerd. Negatieve waarden voor de parameteraantal te retourneren segmenten 'stript' effectief segmenten van het einde van de tekenreeks. Negatieve waarden voor heteerste te retourneren segment vertaalt zich naar 'begin rechts te tellen':
{{#titleparts:Talk:Foo/bar/baz/quok | -1 }}
→Talk:Foo/bar/baz Hiermee stript u één segment van het uiteinde van de tekenreeks. Zie ook {{BASEPAGENAME}}.{{#titleparts: Talk:Foo/bar/baz/quok | -4 }}
→ Stript alle 4 segmenten van het einde van de string{{#titleparts: Talk:Foo/bar/baz/quok | -5 }}
→ Stript 5 segmenten van het einde van de string (meer dan er zijn){{#titleparts: Talk:Foo/bar/baz/quok | | -1 }}
→ quok Retourneert het laatste segment. Zie ook {{SUBPAGENAME}}.{{#titleparts: Talk:Foo/bar/baz/quok | -1 | 2 }}
→ bar/baz Stript één segment van het einde van de tekenreeks, retourneert vervolgens het tweede segment en verder{{#titleparts: Talk:Foo/bar/baz/quok | -1 | -2 }}
→ baz Begin met kopiëren bij het voorlaatste element; strip één segment van het einde van de stringVoor de verwerking is de parameterpagename HTML-gedecodeerd: als deze enkele standaard HTML-tekenentiteiten bevat, worden deze geconverteerd naar gewone tekens (intern gecodeerd met UTF-8, d.w.z. dezelfde codering als in de MediaWiki-bronpagina met behulp van deze parserfunctie).
"
,"
of"
inpaginanaam wordt vervangen door"
.{{PAGENAME}}
en dergelijke) is bekend dat ze tekenreeksen retourneren die onnodig HTML-gecodeerd zijn, zelfs als hun eigen invoerparameter niet HTML-gecodeerd was:De parserfunctie titleparts kan vervolgens worden gebruikt als tijdelijke oplossing om deze geretourneerde tekenreeksen te converteren, zodat ze correct kunnen worden verwerkt door sommige andere parserfuncties die ook een paginanaam in parameter nemen (zoals{{PAGESINCAT:}}
maar die nog steeds niet goed werken met HTML-gecodeerde invoerreeksen.
Als de huidige pagina bijvoorbeeld de categorieIvoorkust, is, dan:
{{#ifeq: {{FULLPAGENAME}} | Category:Côte-d'Or | 1 | 0 }}
en{{#ifeq: {{FULLPAGENAME}} | Category:Côte-d'Or | 1 | 0 }}
worden beide geretourneerd als beide1
; (de #ifeq parserfunctie voert de HTML-decodering van de invoerparameters uit).{{#switch: {{FULLPAGENAME}} | Category:Côte-d'Or = 1 | #default = 0 }}
en{{#switch: {{FULLPAGENAME}} | Category:Côte-d'Or = 1 | #default = 0 }}
worden beide als1
geretourneerd; (de #ifeq parserfunctie voert de HTML-decodering van de invoerparameters uit).{{#ifexist: {{FULLPAGENAME}} | 1 | 0 }}
,{{#ifexist: Category:Côte-d'Or | 1 | 0 }}
zelfs{{#ifexist: Category:Côte-d'Or | 1 | 0 }}
zullen allemaal1
retourneren als die categoriepagina bestaat (de #ifexist parserfunctie voert de HTML-decodering van de invoerparameters uit);{{PAGESINCAT: Côte-d'Or }}
retourneert een niet-nulgetal, als die categorie pagina's of subcategorieën bevat,maar:{{PAGESINCAT: {{CURRENTPAGENAME}} }}
, kan nog steedsonvoorwaardelijk 0 retourneren, net als:{{PAGESINCAT: {{PAGENAME:Category:Côte-d'Or}} }}
{{PAGESINCAT: {{PAGENAME:Category:Côte-d'Or}} }}
De reden van dit onverwachte gedrag is dat er bij de huidige versies van MediaWiki er twee kanttekeningen zijn:
{{FULLPAGENAME}}
, of zelfs{{FULLPAGENAME:Côte-d'Or}}
kan de daadwerkelijk HTML-gecodeerde tekenreeks retournerenCategory:Côte-d'Or
en niet de verwachteCategory:Côte-d'Or
, en dat:{{PAGESINCAT: Côte-d'Or }}
retourneertonvoorwaardelijk 0 (het magische trefwoord PAGESINCAT voert geen HTML-decodering van de invoerparameter uit).De eenvoudige oplossing met behulp van titleparts (die zal blijven werken als de twee kanttekeningen worden opgelost in een latere versie van MediaWiki) is:
{{PAGESINCAT: {{#titleparts: {{CURRENTPAGENAME}} }} }}
{{PAGESINCAT: {{#titleparts: {{PAGENAME:Category:Côte-d'Or}} }} }}
{{PAGESINCAT: {{#titleparts: {{PAGENAME:Category:Côte-d'Or}} }} }}
, die allemaal het werkelijke aantal pagina's in dezelfde categorie retourneren.Vervolgens wordt de gedecodeerdepagename zoveel mogelijk gecanoniseerd tot een standaard paginatitel die door MediaWiki wordt ondersteund:
{{#titleparts: Talk:Foo/bah_boo|1|2}}
→bah boo Niet bah_boo, ondanks de underscore in het origineel.{{#titleparts: a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/aa/bb/cc/dd/ee | 1 | 25 }}
→y/z/aa/bb/cc/dd/ee{{#titleparts: {{#titleparts: a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/aa/bb/cc/dd/ee| 1 | 25 }} | 1 | 2}}
→z{{#titleparts:talk:a/b/c }}
→Talk:A/b/c{{#titleparts:one/two/three/four|1|1 }}
→One{{#titleparts: one/two/three/four|1|2 }}
→twoAls kleine letters nodig zijn, gebruik dan de functie lc: om de uitvoer te regelen:
{{lc: {{#titleparts:one/two/three/four|1|1 }} }}
→oneU kunt een schuine streep aan het begin van de tekenreeks voorafgaan om de juiste eerste subtekenreekshoofdletter (hoofdletter of kleine letter) te krijgen. Gebruik2
in plaats van1
vooreerste segment om te retourneren:
{{#titleparts:/one/two/three/four|1|2 }}
→one{{#titleparts:/One/two/three/four|1|2 }}
→One![]() | Bepaalde tekens dieillegaal zijn in een paginatitel, zorgen ervoor dat #titleparts de tekenreeks niet goed verwerkt:
|
![]() | Als een deel van de titel alleen ". >" of ".. " is, zal #titleparts de tekenreeks niet parseren:
|
![]() | Deze functie degradeert niet gracieus als de invoer groter is dan 255 bytes in UTF-8. Als de invoerreeks 256 bytes of meer is, wordt de hele tekenreeks geretourneerd. |
De extensie ParserFunctions definieert optioneel verschillende tekenreeksfuncties als$wgPFEnableStringFunctions
is ingesteld optrue
:
#len
#pos
#rpos
#sub
#count
#replace
#explode
#urldecode
Zie voor voorbeelden de speciale subpagina voor documentatie enManual:Performing string operations with parser functions.
![]() | In 2013 werd besloten datdeze functiesnooit zullen worden ingeschakeld op een Wikimedia-wiki, omdat ze inefficiënt zijn wanneer ze op grote schaal worden gebruikt (ziephab:T8455 voor wat geschiedenis).Deze functies werken NIET op Wikimedia wiki's! Als u hier bent om iets te schrijven op een Wikimedia-project, dan zoekt u iets anders: als uw home wiki stringsfuncties heeft, gebruikt het waarschijnlijkLua. De Engelstalige Wikipedia gebruikt bijvoorbeeldModule String, die een aantal van dezelfde dingen doet met een totaal verschillende syntaxis. Er zijn ook individueleSjablonen voor het verwerken van tekenreeksen. |
Hier is een kort overzicht van de functies vanModule:String:
{{#invoke:String|len|target_string}}
{{#invoke:String|sub|target_string|start_index|end_index}}
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}
{{#invoke:String|pos|target_string|index_value}}
{{#invoke:String|find|source_string|target_string|start_index|plain_flag}}
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
{{#invoke:String|rep|source|count}}
{{#invoke:String|escapePattern|pattern_string}}
{{#invoke:String|count|source_str|pattern_string|plain_flag}}
{{#invoke:String|join|separator|string1|string2|...}}
Parserfuncties kunnenvervangen worden door het hash-teken vooraf te voegen metsubst:
:
{{subst:#ifexist: Help:Extension:ParserFunctions/nl | [[Help:Extension:ParserFunctions/nl]] | Help:Extension:ParserFunctions/nl }}
→ de code[[Help:Extension:ParserFunctions/nl]]
wordt ingevoegd in de wikitekst aangezien de pagina Help:Extension:ParserFunctions/nl bestaat.![]() | De resultaten van gesubstitueerde parserfuncties zijn ongedefinieerd als de expressiesniet-substitueerde vluchtige code bevatten, zoalsvariables of andere parserfuncties. Voor consistente resultaten moet alle vluchtige code in de te evalueren expressie worden vervangen. Zie Vervanging. |
Substitutie werkt niet binnen<ref>
…</ref>
; U kunt hiervoor{{subst:#tag:ref|
…}}
gebruiken.
Vooral{{#time:
…|now-
…}} zou handig kunnen zijn bijdoorverwijzingen naar pagina's inclusief datums, maar dit werkt niet.
Parserfuncties vernielen dewikitable syntaxis en pipe-tekens (|
), waarbij alle onbewerkte pipe-tekens als parameterscheiders worden behandeld.Om dit te voorkomen, gebruikten de meeste wiki's een sjabloonTemplate:! met als inhoud alleen een onbewerkte pipe-teken (|
), aangezien MW 1.24 een{{!}}
magisch woord deze lelijke oplossing verving.Dit 'verbergt' de pipe voor de MediaWiki-parser, waardoor deze pas wordt overwogen nadat alle sjablonen en variabelen op een pagina zijn uitgebreid.Het wordt dan geïnterpreteerd als een tabelrij of kolomscheidingsteken.Als alternatief kan onbewerkte HTML-tabelsyntaxis worden gebruikt, hoewel dit minder intuïtief en foutgevoeliger is.
U kunt het pipe-teken | onderdrukken bij weergave als een gewoon, niet-geïnterpreteerd teken met behulp van een HTML-entiteit:|
of|
.
Beschrijving | U typt | U krijgt |
---|---|---|
Het pipe-teken als tabelrij/kolomscheidingsteken | {{!}} | | |
Het pipe-teken als gewoon teken | | | | |
Voorbeeld van de beveiliging van het pipe-teken:
{{Documentation|content=... text before ...<code>subpage-name=sandbox3</code> is equivalent to <code>sandbox link=../sandbox3 | sandbox name=sandbox3</code>.... text after ...}}
We zien dattext after niet wordt weergegeven wanneer het | net voorsandbox name= aanwezig is, omdat|sandbox name= als fout wordt beschouwd als een parameter van sjabloonDocumentation op hetzelfde niveau als|content= is.
Van alle parameters van deze parserfuncties wordt de witruimte, inclusief nieuwe lijnen, tabs en spaties, vooraan en achteraan verwijderd. Als dit niet wenselijk is, kan vergelijking van strings worden gedaan nadat ze tussen aanhalingstekens zijn geplaatst.
{{#ifeq: foo | foo | equal | not equal }}
→equal{{#ifeq: "foo " | " foo" | equal | not equal }}
→not equalOm het trimmen van 'then' en 'else' delen te voorkomen, ziem:Template:If. Sommige mensen doen dit door <nowiki> </nowiki> te gebruiken in plaats van spaties.
foo{{#if:|| bar}}foo
→foobarfoofoo{{#if:||<nowiki/>bar<nowiki/>}}foo
→foo bar fooDeze methode kan echter alleen worden gebruikt om een witruimteteken met één ruimte weer te geven, omdat de parser meerdere witruimtetekens op een rij in één samenperst.
<spanstyle="white-space: pre;">foo{{#if:||<nowiki/> bar<nowiki/>}}foo</span> | → | foo bar foo |
In dit voorbeeld wordt de stijlwhite-space: pre
gebruikt om te forceren dat de witruimte door de browser wordt bewaard, maar zelfs daarmee worden de spaties niet weergegeven. Dit gebeurt omdat de ruimtes door de software worden gestript voordat ze naar de browser worden verzonden.
Het is mogelijk om dit gedrag te omzeilen door witruimtes te vervangen door 
(breakable space) of
(non-breakable space), omdat ze niet door de software worden gewijzigd:
<spanstyle="white-space: pre;">foo{{#if:||   bar   }}foo</span>
→foo bar foofoo{{#if:|| bar }}foo
→foo bar fooNBː Niet alle parameters worden gelijk aangemaakt.In ParserFunctions wordt altijd mogelijke witte ruimte aan het begin en het einde verwijderd.Insjablonen, wordt witte ruimte aan het begin en het einde verwijderd voor parameters met naam en benoemde parameters zonder naam, maar "niet" voor onbenoemde parameters:
"{{lc: AbC}}"
→ "abc"[1]"{{uc: AbC}}"
→ "ABC"[2]"{{lcfirst: AbC}}"
→ "abC"[3]"{{ucfirst: abc}}"
→ "Abc"[4]"{{urlencode: AbCdEf ghi}}"
uitvoer wordt
"AbC%0AdEf+ghi"
Dus interne nieuwe regels worden omgezet in %0A, en interne spaties worden omgezet in +.
{{anchorencode: AbC dEf ghi}}
uitvoer wordt
AbC_dEf_ghi