Funkcije parsera svojevrsne su magične riječi koje primaju parametre i vraćaju rezultat nakon obrade.
Vidi članke na MediaWikiju Help:Magic words#Parser functions i Help:Extension:ParserFunctions.
Uvjetne parserske funkcije
expr
| Tip | Operatori |
|---|---|
| Grupiranje (zagrade) | ( )
|
| Brojevi | 1234.5 e (2.718) pi (3.142)
|
Binarni operator e unarni +,-
| |
| Unarni | not ceil trunc floor abs exp ln sin cos tan acos asin atan
|
| Binarni | ^
|
* / div mod
| |
+ -
| |
| Zaokruživanje | round
|
| Booleova algebra | = != <> > < >= <=
|
and
| |
or
|
Parserska funkcija #expr služi za izračunavanje matematičkih ili Booleovih izraza. Funkcija podržava logaritamske i trigonometrijske izračune, znanstvenu notaciju, matematičke funkcije poput floor() ili trunc() i poštuje redoslijed matematičkih operacija.
Sintaksa: {{#expr: matematički izraz }}
{{#expr:floor1.5e1}}=> 15{{#expr:(not0or1)and0}}=> 0{{#expr:floor1.5^2}}=> 1{{#expr:12/3*2}}=> 8{{#expr:111/3mod10}}=> 7{{#expr:358mod10*2}}=> 16{{#expr:1.234round2-1}}=> 1.2
if
Funkcija #if prima određenu vrijednost i vraća rezultat ovisno o tome je li vrijednost prazna ili ne.
Sintaksa: {{#if: testni izraz | rezultat ako izraz nije prazan | rezultat ako je izraz prazan ili sadrži samo bjeline }}
{{#if: abc | postoji | ne postoji}}=> postoji{{#if: | postoji | ne postoji}}=> ne postoji
Funkcija se najčešće upotrebljava za provjeru ima li parametar predloška asociranu vrijednost ili ne. Parametar nakon imena mora imati znak | kako bi funkcija radila očekivano. Primjerice, ako pozovemo predložak {{Primjer |ime=David}}, tada je:
{{#if: {{{ime|}}} | postoji | ne postoji }}=> postoji{{#if: {{{ime|}}} | Bok {{{ime}}}! | Niste unijeli ime }}=> Bok David!{{#if: {{{prezime|}}} | postoji | ne postoji }}=> ne postoji{{#if: {{{prezime}}} | postoji | ne postoji }}=> postoji [a]
Ponašanje parametara detaljnije je prikazano u tablici ispod:
| Parametar | {{{1}}} | {{{1|}}} | {{#if: <parametar> | da | ne }} | ||
|---|---|---|---|---|---|
| Opis | Primjer, pozicijski | {{{1}}} | {{{1|}}} | ||
| Nije definiran | {{primjer}}
|
{{{1}}} | da | ne | |
| Definiran, ali prazan ili null | {{primjer|}}, {{primjer|1=}}, {{primjer|param=}}
|
ne | ne | ||
| Definiran, nije prazan | {{primjer|abc}}, {{primjer|1=abc}}, {{primjer|param=abc}}
|
abc | abc | da | da |
ifeq
Funkcija parsera #ifeq uspoređuje dvije ulazne vrijednosti i vraća rezultat ovisno o tome jesu li vrijednosti identične. Ako je potrebno raditi više usporedbi i definirati više od dva izlazna slučaja, preporučeno je upotrebljavati funkciju #switch.
Sintaksa: {{#ifeq: prvi ulaz | drugi ulaz | rezultat ako su ulazi jednaki | rezultat ako ulazi nisu jednaki }}
{{#ifeq: abc | abc | jednako | nejednako }}=> jednako{{#ifeq: abc | def | jednako | nejednako }}=> nejednako{{#ifeq: Abc | abc | jednako | nejednako }}=> nejednako
Ako su obje ulazne vrijednosti ispravne brojčane vrijednosti, usporedit će se kao brojevi:
{{#ifeq: 01 | 1 | jednako | nejednako }}=> jednako{{#ifeq: "01" | "1" | jednako | nejednako }}=> nejednako{{#ifeq: 0 | -0 | jednako | nejednako }}=> jednako{{#ifeq: 1e3 | 1000 | jednako | nejednako }}=> jednako{{#ifeq: {{#expr:10^3}} | 1000 | jednako | nejednako }}=> jednako
Upotreba magičnih riječi i oznaka u XML-u unutar parserskih funkcija može imati neočekivane rezultate:
{{#ifeq: <nowiki>abc</nowiki> | <nowiki>abc</nowiki> | jednako | nejednako }}=> nejednako{{#ifeq: <math>abc</math> | <math>abc</math> | jednako | nejednako }}=> nejednako{{#ifeq: {{:Posebno:PrefixIndex/{{FULLPAGENAME}}/}} | {{:Posebno:PrefixIndex/{{FULLPAGENAME}}/}} | jednako | nejednako }}=> nejednako
iferror
Parserska funkcija #iferror prima unos i vraća jedan od dva rezultata ovisno o tome vraća li unos pogrešku ili ne. Pogreškom se smatra bilo koji objekt u HTML-u s atributom class="error" poput poruka o pogrešci pri izvođenju drugih parserskih funkcija.
Sintaksa: {{#iferror: testni izraz | rezultat ako izraz vraća grešku | rezultat ako je izraz ispravan }}
{{#iferror: {{#expr: 1 + 2 }} | pogrešno | ispravno }}=> ispravno{{#iferror: {{#expr: 1 + X }} | pogrešno | ispravno }}=> pogrešno{{#expr: 1 + X }}=> Pogreška u izrazu: nepoznata riječ »x«
Ako se izostavi rezultat pri ispravnom izrazu, vraća se rezultat testnog izraza (ako nije pogrešan). Ako se izostavi i rezultat pri pogrešci, a rezultat sadrži pogrešku, vraća se prazan rezultat .
{{#iferror: {{#expr: 1 + 2 }} | pogrešno }}=> 3{{#iferror: {{#expr: 1 + X }} | pogrešno }}=> pogrešno{{#iferror: {{#expr: 1 + 2 }} }}=> 3{{#iferror: {{#expr: 1 + X }} }}=>{{#iferror: {{#expr: . }} | pogrešno | ispravno }}=> ispravno{{#expr: . }}=> 0
{{#iferror: <strong class="error">abc</strong> | pogrešno | ispravno }}=> pogrešno<strong class="error">abc</strong>=> abc
ifexpr
Parserska funkcija #ifexpr prima matematički izraz i vraća jedan od dvaju rezultata ovisno o tome je li izraz matematički ispravan ili ne.
Sintaksa: {{#ifexpr: matematički izraz | rezultat ako je izraz točan | rezultat ako je izraz pogrešan }}
Svi se izrazi izračunavaju jednako kao kod funkcije #expr. Rezultat izraza zatim se promatra Booleovom logikom (istina ili laž).
{{#ifexpr: 1 > 0 | da | ne }}=> da{{#ifexpr: 1 < 0 | da | ne }}=> ne{{#ifexpr: 0 = 0 | da | ne }}=> da{{#ifexpr: 1 > 0 | | ne }}=>{{#ifexpr: 1 > 0 }}=>{{#ifexpr: floor1.5e1 = 15 | da | ne }}=> da
Booleova logika također je podržana:
{{#ifexpr: 0 = 0 or 1 = 0 | da | ne }}=> da{{#ifexpr: 0 = 0 and 1 = 0 | da | ne }}=> ne
ifexist
Funkcija parsera #ifexist prima naslov stranice i ispisuje vrijednost ovisno o tome postoji li stranica na lokalnom projektu.
Sintaksa: {{#ifexist: ime stranice | rezultat ako je stranica postoji | rezultat ako stranica ne postoji }}
Provjera stranice tom funkcijom dodaje poveznicu na Posebno:Što vodi ovamo za traženu stranicu. Kad bi se primjerice na toj stranici izveo kod {{#ifexist:Abc}}, pregled Što vodi ovamo sa stranice Abc sadržavao bi i poveznicu na tu stranicu. Provjera stranice koja ne postoji dodaje njezinu poveznicu na Posebno:Tražene stranice (vidi phab:T14019 za detalje).
Ako je stranica stvorena pod navedenim naslovom, funkcija će je tretirati kao da postoji neovisno o tome ima li stranica sadržaj ili je izbijeljena, u kakvu je obliku sadržaj koji se na njoj nalazi (wikitekst, CSS, JavaScript, modul, slika ili drugo), je li vizualno prazna (primjerice ako se sastoji samo od kategorija ili međuwikipoveznica) i služi li za preusmjeravanje. Funkcija će tvrditi da stranica ne postoji samo ako je poveznica na stranicu crvena; u to mogu spadati i stranice koje su postojale, ali su potom izbrisane.
{{#ifexist: Pomoć:Funkcije parsera | postoji | ne postoji }}=> postoji{{#ifexist: ABCPomoć:Funkcije parseraABC | postoji | ne postoji }}=> ne postoji
Ako pružimo poveznice na poruke sučelja, funkcija će zaključiti da one postoje isključivo ako postoji lokalna inačica stranice.
{{#ifexist: MediaWiki:Talkpagetext | postoji | ne postoji }}=> postoji{{#ifexist: MediaWiki:Title-invalid-too-long | postoji | ne postoji }}=> ne postoji [b]
Funkcija ispravno radi i s posebnim stranicama koje stvaraju proširenja instalirana na trenutačnom projektu.
{{#ifexist: Special:Watchlist | postoji | ne postoji }}=> postoji{{#ifexist: Posebno:Praćene stranice | postoji | ne postoji }}=> postoji{{#ifexist: Special:Checkuser | postoji | ne postoji }}=> ne postoji [c]{{#ifexist: Posebno:Provjeri suradnika | postoji | ne postoji }}=> ne postoji
Pri provjeri datoteka upotreba prefiksa Datoteka: ili File: provjerit će postojanje lokalne inačice datoteke, neovisno o tome postoji li datoteka na Wikimedijinom Zajedničkom poslužitelju. Upotreba prefiksa Media: pretražit će i Zajednički poslužitelj.
Primjer datoteke s Wikimedijinog Zajedničkog poslužitelja:
{{#ifexist: Datoteka:JAB-code.png | postoji | ne postoji }}=> ne postoji{{#ifexist: File:JAB-code.png | postoji | ne postoji }}=> ne postoji{{#ifexist: Media:JAB-code.png | postoji | ne postoji }}=> postoji
Primjer lokalne datoteke:
{{#ifexist: Datoteka:EWTN Logo.svg | postoji | ne postoji }}=> postoji{{#ifexist: File:EWTN Logo.svg | postoji | ne postoji }}=> postoji{{#ifexist: Media:EWTN Logo.svg | postoji | ne postoji }}=> ne postoji
Ograničenja ifexist
Funkcija #ifexist smatra se zahtjevnom parserskom funkcijom. Svaka stranica na projektu dopušta zvanje ograničenog broja zahtjevnih funkcija (obično njih 500). U to se ograničenje ubrajaju i zahtjevne funkcije pozvane unutar predložaka u članku. Svaka zahtjevna funkcija pozvana nakon dostizanja tog ograničenja vratit će rezultat false (negativnu granu funkcije) bez provjere rezultata.
switch
Parserska funkcija #switch uspoređuje jednu ulaznu vrijednost s više mogućih ogranaka i vraća izlaznu vrijednost asociranu uz ogranak u kojem je pronađena podudarnost.
Sintaksa:
{{#switch: vrijednost koju uspoređujemo
| slučaj1 = rezultat1
| slučaj2 = rezultat2
| ...
| slučajN = rezultatN
| #default = rezultat ako nema podudarnosti
}}
Ako se grana #default izostavi, a nema podudarnosti, funkcija neće ispisati nikakav rezultat. Zadnja grana bez jednakosti predodređeno je default, pa se tekst "#default=" može i izostaviti.
Primjeri:
{{#switch: abc |abc = rezultat1 |def = rezultat2 |ghi = rezultat3 |#default = ništa}}=> rezultat1{{#switch: def |abc = rezultat1 |def = rezultat2 |ghi = rezultat3 |#default = ništa}}=> rezultat2{{#switch: ghi |abc = rezultat1 |def = rezultat2 |ghi = rezultat3 |#default = ništa}}=> rezultat3{{#switch: zzz |abc = rezultat1 |def = rezultat2 |ghi = rezultat3 |#default = ništa}}=> ništa{{#switch: zzz |abc = rezultat1 |def = rezultat2 |ghi = rezultat3 | ništa}}=> ništa
Kao što je bio slučaj s #ifeq, ako je vrijednost koja se ispituje numerička, uspoređivat će se kao broj:
{{#switch: 0 + 1 | 1 = jedan | 2 = dva | drugo }}=> drugo{{#switch: {{#expr: 0 + 1}} | 1 = jedan | 2 = dva | drugo }}=> jedan
Funkcija razlikuje velika i mala slova:
{{#switch: a | a = A | b = B | C }}=> A{{#switch: A | a = A | b = B | C }}=> C
Funkcija staje čim se pronađe prva podudarnost. Sva ostala poklapanja (ako postoje) ignoriraju se:
{{#switch: b | f = abc | b = def | b = ghi | ništa }}=> def
Grupiranje rezultata
Funkcija podržava mogućnost da nekoliko slučajeva vraća isti rezultat:
{{#switch: vrijednost
| 1 = prvi
| 2 = drugi
| 3|4|5 = treći do peti
| 6|7 = šesti ili sedmi
| 8 = osmi
| #default: više od osam
}}
U tom slučaju vrijednosti 3, 4 ili 5 vraćaju rezultat "treći do peti", a vrijednosti 6 ili 7 vraćaju "šesti ili sedmi".
Upotreba uz parametre predložaka
Funkcija kao vrijednost može provjeravati i vrijednost parametra predloška. Za razliku od funkcije #if uz navođenje parametra nije nužno pisati znak |. Primjerice:
{{#switch: {{{1}}} |abc = rezultat1 |def = rezultat2 |#default = ništa}}
Ako je u gornjem kodu prvi parametar jednak vrijednosti "abc", funkcija će vratiti "rezultat1", a ako je jednak "def", funkcija će vratiti "rezultat2". Ako prvi parametar nije naveden ili nema vrijednost, ili ako ima vrijednost koja nije navedena u funkciji switch, funkcija će vratiti "ništa".
time
Bilješke
- ↑ Nedostaje znak
|; ovo se shvaća kao doslovni unos "{{{prezime}}}" - ↑ Ova poruka postoji na TranslateWikiju, i koristi se u sučelju, ali ne postoji lokalno premoštenje ovog prijevoda
- ↑ Na ovom je projektu aktivno proširenje mw:Extension:Checkuser