Pomoč:ParserFunctions

Iz Wikipedije, proste enciklopedije
Skoči na: navigacija, iskanje
Bližnjice:
WP:PF
WP:PARSER

Gre za kopijo temeljne predložne strani z Meta. Kopije ne urejajte. Stran posodobite s kopiranjem iz meta, pri čemer pazite, da se bodo ohranile vse za Wikipedijo specifične predloge.


Opombe, prosim dodajte na pogovorni strani.


Ta razširitev programja MediaWiki je zbirka funkcij za razčlenjevanje kode. Funkcije za razčlenjevanje kode imajo v splošnem skladnjo:

{{#functionname: argument 1 | argument 2 | argument 3...}}

Funkcije[uredi | uredi kodo]

Nasvet: Uporabo izrazov s funkcijami za razčlenjevanje kode si lahko neposredno prikažemo s Special:ExpandTemplates.

Ta modul trenutno definira osem funkcij: expr, if, ifeq, ifexist, ifexpr, switch, and time, and rel2abs.

#expr:

Na točnost in format numeričnih rezultatov vpliva tudi operacijski sistem strežnika.

#expr:[uredi | uredi kodo]

Funkcija expr izračunava matematične izraze na osnovi permutacije števil (ali spremenljivk / parametrov, ki se prevedejo v števila) in operatorjev. Z nizi ne deluje; zanje uporabite funkcijo ifeq. Skladnja je naslednja:

{{ #expr: expression }}

Sledi seznam podprtih operatorjev. Za več podrobnosti glej m:Pomoč:Računanje, v grobem pa gre za (1) grupiranje (oklepaji), (2) unarne (znaki + / - in NOT), (3) multiplikativne (*, /, div, mod), (4) aditivne (+ and -), (5) zaokrožitveni, (6) primerjalne (=, !=, <, > itd.), (7) logični AND, (8) logični OR. V istem prednostnem razredu so operatorji obravnavani z leve na desno. Kot vedno je bolje uporabiti nekaj odvečnih oklepajev kot napačno jedrnato kodo.

Operator Operacija Zgled
none

{{ #expr: 123456789012345 }} = 1.2345678901234E+14

{{ #expr: 0.000001 }} = 1.0E-6

( ) Operatorji grupiranja

{{ #expr: (30 + 7) * 7 }} = 259

+ Unarni znak +

{{ #expr: +30 * +7 }} = 210

- Unarni znak - (negacija)

{{ #expr: -30 * -7 }} = 210

not unarni NOT, logični NOT

{{ #expr: not 0 * 7 }} = 7
{{ #expr: not 30 + 7 }} = 7

* množenje

{{ #expr: 30 * 7 }} = 210

/ deljenje, enako kot div

{{ #expr: 30 / 7 }} = 4.2857142857143

div deljenje, enako kot /,
brez celoštevilčnega deljenja

{{ #expr: 30 div 7 }} = 4.2857142857143
{{ #expr: 5 div 2 * 2 + 5 mod 2 }} = 6

mod Modulo, ostanek po celoštevilčnem deljenju.
Pozor, div in mod sta drugačna kot pri programskih jezikih.

{{ #expr: 30 mod 7 }} = 2
{{ #expr: -8 mod -3 }} = -2
{{ #expr: -8 mod +3 }} = -2
{{ #expr: 8 mod 2.7 }} = 0
{{ #expr: 8 mod 3.2 }} = 2
{{ #expr: 8.9 mod 3 }} = 2

+ Seštevanje

{{ #expr: 30 + 7 }} = 37

- Odštevanje

{{ #expr: 30 - 7 }} = 23

round Zaokroži število na levi na potenco 1/10, dano na desni

{{ #expr: 30 / 7 round 4 }} = 4.2857
{{ #expr: 30 / 7 round 1 }} = 4.3
{{ #expr: 1911 round -2 }} = 1900
{{ #expr: -2.5 round 0 }} = -3

= Enako (numerično in logično)

{{ #expr: 30 = 7 }} = 0

<> Neenako, enako kot !=

{{ #expr: 30 <> 7 }} = 1

 != Neenakost, enako kot <>, logični xor

{{ #expr: 1 != 0 }} = 1

< Manjše

{{ #expr: 30 < 7 }} = 0

> Večje

{{ #expr: 30 > 7 }} = 1

<= Manjše ali enako

{{ #expr: 30 <= 7 }} = 0

>= Večje ali enako

{{ #expr: 30 >= 7 }} = 1

and Logični AND

{{ #expr: 4 < 5 and 4 mod 2 }} = 0

or Logični OR

{{ #expr: 4 < 5 or 4 mod 2 }} = 1

Booleanovi operatorji obravnavajo 0 kot vrednost false (neresnično), vsa druga števila pa kot true (resnično). Pri izložku se true prikaže kot 1.

Števila so decimalno podana z "." za decimalno piko. Za spremembo decimalne pike v vejico za krajevno prilagoditev programja lahko uporabite funkcijo formatnum:. Znanstvena notacija z eksponentom E plus za izraze še ni podprta, uporablja pa se pri izložku. Za podrobnosti glej m:Pomoč:Računanje.

#if:

Funkcija {{#if:}} je konstrukt vrste če-potem-sicer. Njena skladnja je:

{{ #if: <niz pogoja> | <besedilo za potem> | <besedilo za sicer> }}
{{ #if: <niz pogoja> | <besedilo za potem> }}

Uporabljeni pogoje je "Niz pogoja je ne-prazen". Tako je pri praznem nizu pogoja ali nizu pogoja, ki sestoji le iz belih znakov, pogoj neresničen in programje vrne besedilo sicer. Sicer vrne besedilo potem. Besedilo sicer lahko izpustite, pri čemer bo, kadar bo pogoj neresničen, rezultat prazen.

Zgled:

{{ #if:  {{{parameter|}}} | Parameter je definiran. | Parameter je nedefiniran ali prazen  }}

Pri tem poudarimo, da niz pogoja sam po sebi ni niz kot npr. "1 = 2"; na primer, {{ #if: 1 = 2 | da | ne }} vrne "da", saj niz "1 = 2" ni prazen. Znakov "=" in matematičnih izrazov funkcija {{#if:}} torej ne podpira.

#ifeq:

Funkcija {{#ifeq:}} primerja dva niza ali števili in glede na rezultat primerjave vrne drug niz. Skladnja je:

{{ #ifeq: <besedilo 1> | <besedilo 2> | <besedilo pri enakosti> | <besedilo pri neenakosti>  }}

Kadar je oba niza mogoče tolmačiti kot število, je rezultat številčen. Za primerjavo nizov dodajte znake, ki jih kot število ni mogoče tolmačiti:

{{ #ifeq: +07 | 007 | 1 | 0 }} vrne 1
{{ #ifeq: "+07" | "007" | 1 | 0 }} vrne 0

Primerjava nizov upošteva tudi velikost črk:

{{ #ifeq: A | a | 1 | 0 }} vrne 0
Zaradi skladnosti s starejšimi predlogami funkcija #if: ne more neposredno ločevati podanih in nepodanih vrednosti parametrov. Gre za bližnjico za primerjavo s praznim nizom. Nepodane parametre je mogoče neposredno odkriti s funkcijo #ifeq::
{{ #if: {{{x| }}} | neprazno | prazno }} = prazno,
{{ #ifeq: {{{x| }}} | | prazno | neprazno }} = prazno,
{{ #ifeq: {{{x| }}} | {{{x|u}}} | definirano | nedefinirano }} = nedefinirano.
Nedoločen parameter brez privzete vrednosti šteje v primerjavi kot niz, ki sestoji iz oznake:
{{ #ifeq: {{{x}}} | {{concat|{|{|{x}|}|}}} | 1 | 0 }} = 1.

#ifexist:

Funkcija {{#ifexist:}} vrne enega od dveh rezultatov, odvisno od tega, ali določena stran obstaja.

{{ #ifexist: <page name> | <wikitext if page exists> | <wikitext if page does not exist>  }}

Veljajo običajna pravila za razlikovanje velikosti črk: kadar stran obstaja, da pozitiven rezultat tudi nekanonično ime strani. Zgled na Meta:

{{ #ifexist: Bugs|Foo|RFC 3092 }} vrne RFC 3092, kajti Foo obstaja
{{ #ifexist: bugs|Foo|RFC 3092 }} vrne RFC 3092, saj je foo v kanonični obliki obstoječi Foo
{{ #ifexist: BUGS|Foo|RFC 3092 }} vrne RFC 3092, saj FOO ne obstaja
{{ #ifexist: m:Help:Calculation|Da|Ups }}, četudi m:Help:Calculation obstaja, zaradi interwikipredpone vrne Ups.

Prvi parameter je naslov, ki ga naj programje išče, drugi je pozitivni rezultat, tretji pa negativni rezultat. Kadar vpisani parameter ne vrne veljavnega naslova objekta, je rezultat negativen.

Enak rezultat da m:Template:exists (pogovor, povezave, uredi), razen da je rezultat za interwiki-povezavo pozitiven. Interwikipovezavo lahko obravnavate tudi z m:Template:if interwiki link (pogovor, povezave, uredi).

#ifexpr:

Funkcija {{#ifexpr:}} obravnava matematični izraz in glede na rezultat vrne enega od dveh nizov.

{{ #ifexpr: <expression> | <then text> | <else text>  }}


Če je rezultat izraza nič, funkcija vrne besedilo sicer, drugače pa besedilo potem. Skladnja izraza je enaka kot za expr.

Trenutno da besedilo sicer tudi prazen izraz:
{{ #ifexpr: {{ns:0}}|Toast| '''ali sicer''' }} vrne ali sicer
Če izpustite tako besedilo potem kot besedilo sicer, izložka ni, razen morda sporočilo o napaki. S tem lahko preverite pravilnost izraza oziroma besedilo sporočila o napaki (posnemane trditve, prisiljene napake):
{{ #ifexpr: 1/{{#ifeq: {{ns: 4 }} | Meta | 1 | 0 }} }} Deljenje z ničlo -- rezultata ni, torej je "1/{{#ifeq: {{ns:4}}|Meta|1|0}}" pravilen izraz.
{{ #ifexpr: 1/{{#ifeq: {{ns: 0 }} | Meta | 1 | 0 }} }} Deljenje z ničlo
{{ #if: {{#ifexpr: 1=2 }} | narobe | pravilno }} pravilno -- "1=2" je pravilen booleanski izraz (ne smemo ga zamenjevati z izrazom z vrednostjo 1, ki predstavlja "prav")
{{ #if: {{#ifexpr: 1E2 }} | narobe | pravilno }} pravilno -- "1E2" v izrazih ni dovoljeno
{{ #if: {{#ifexpr: 1/0 }} | narobe | pravilno }} narobe -- "1/0" ni dovoljeno
{{ #if: {{#ifexpr: a=b }} | narobe | pravilno }} narobe ("a=b" ni dovoljeno, za primerjavo nizov uporabi #ifeq.

Primer uporabe: {{ #if: {{#ifexpr: {{PAGENAME}} }} || rezultat, kadar je PAGENAME število (ali pravilen numerični izraz) }}

Za uporabo glej tudi m:Template:evalns (pogovor, povezave, uredi).

#switch:

Funkcija switch primerja posamezno vrednost z več drugimi in vrne niz, če najde par. Skladnja je v osnovi:

{{#switch: <primerjalna vrednost>
 | <vrednost1> = <rezultat1>
 | <vrednost2> = <rezultat2>
 | ...
 | <vrednostn> = <rezultatn>
 | <prednastavljeni rezultat>
}}

switch išče po danih vrednostih, dokler ne najde para s primerjalno vrednostjo. Ko ga najde, vrne rezultat za to vrednost (besedilni niz po enačaju). Kadar ne najde nobenega para, vendar pa zadnji predmet vsebuje enačaj, vrne kot privzeto vrednost slednjega. Kadar rezultat mora vsebovati enačaj, lahko uporabite #default:

{{#switch: <primerjalna vrednost>
 | <vrednost> = <rezultat>
 | #default = <prednastavljeni rezultat>
}}

Mogoče je oblikovati tudi izpuščene vrednosti (kar zmanjša potrebo po podvajanju rezultatov). Zgled:

{{#switch: <primerjalna vrednost>
| <vrednost1>
| <vrednost2>
| <vrednost3> = <rezultat1, 2, 3>
| ...
| <vrednostn> = <rezultatn>
| <prednastavljeni rezultat>
}}

Vrednost1 in vrednost2 ne vsebujeta enačaja. Če se ujemata, dobita rezultat za vrednost3 (t.j., kar koli je v rezultat3).

Pri #ifeq: je primerjava numerična, kjer je le mogoče:
{{ #switch: +07 | 7 = Da | 007 = Vez | Ne }} vrne Da
{{ #switch: "+07"|"7"= Da |"007"= Vez | Ne }} vrne Ne
Ujemajoča se vrednost je lahko prazna, zato sta naslednja konstrukta enakovredna:
{{ #if: {{ns:0}} | neprazno | prazno }} vrne prazno
{{ #switch: {{ns:0}}|=prazno|neprazno }} vrne prazno

Primerjava nizov razlikuje velikost črk:

{{ #switch: A | a=male črke | A=VELIKE }} vrne VELIKE
{{ #switch: A | a=male črke | VELIKE }} vrne VELIKE
{{ #switch: a | a=male črke | VELIKE }} vrne male črke

Tega ne smemo zamenjevati s tem, da imena funkcij razčlenjevalnika delujejo pri kakršnih koli črkah:

{{ #swItch: A | a=male črke | VELIKE }} vrne VELIKE

Da bi bil stavek #switch neodvisen od velikost črk, lahko dosežemo s konstruktom {{lc:}} ali {{uc:}}

{{ #switch: {{lc:A}} | a=male črke | A=VELIKE }} vrne male črke
{{ #switch: {{lc:A}} | a=male črke | VELIKE }} vrne male črke
{{ #switch: {{lc:a}} | a=male črke | VELIKE }} vrne male črke

To se navadno uporablja v predlogah, ko želimo neodvisnost od velikosti črk pri vrednostih parametrov.:

{{#switch: {{lc: {{{1| B }}} }}
| a
| b
| c = '''''abc''' ali '''ABC'''''
| A
| B
| C = ''Okvara spomina zaradi kozmičnega sevanja''
| #default = N/A
}}

vrne abc ali ABC

Namesto #ifeq lahko uporabimo tudi #switch:

{{ #switch: a | a=pravilno | narobe }} vrne pravilno
{{ #ifeq: a | a | pravilno | narobe }} vrne pravilno

#time:

Funkcija {{#time:}} je funkcija za oblikovanje časa in datuma (samo za datume od 1970 naprej!). Njena skladnja je bodisi

{{ #time: format }}
{{ #time: format | čas }}

Kadar čas ni določen, se uporabi čas, ob katerem je bil članek pretvorjen v HTML-kodo. Ta čas se lahko zaradi strežniške predpomnjenja za teden dni razlikuje od časa, ko je bil članek prikazan, zato so lahko potrebne ročne posodobitve. To dosežemo s shranjenjem strani, ne da bi napravili kakršno koli spremembo (ničelno urejanje), s prikazom strani z vpisanim nizom action=purge v iskalnem nizu spletnega naslova (URL) ali tako, da si stran ogledamo pri izklopljenem predpomnjenju strani v uporabniških nastavitvah (MediaWiki).

Parameter oblika je niz oblike, podoben tistemu, kot ga uporablja PHP-jev datum.

Naslednje kode za oblike imajo enako vrednost kot v PHP. Pomembno razlikovanje od delovanja PHP, razen glede internacionalizacije (t.j. jezikovne in krajevne prilagoditve), je napaka razčlenjevalnika kode in o njej obvestite razvijalce programja. Vse numerične kode za obliko vrnejo števila, oblikovana v skladu s krajevnim jezikom. To lahko povozite s kodo xn, kot je opisano spodaj.


Koda Opis Zgled izložka Trenutni izložek
Leto:
Y Leto s štirimi števkami. npr. 2006 2017
y Leto z dvema števkama. od 00 do 99, npr. 06 za leto 2006. 17
Mesec:
n Številka meseca, brez uvodne ničle. od 1 do 12 4
m Ime meseca, z uvodno ničlo. od 01 do 12 04
M Okrajšava za ime meseca. Pogosto krajevno prilagojeno. od jan do dec apr.
F Popolno ime meseca. Pogosto krajevno prilagojeno. januar april
Teden:
W Številka tedna po standardu ISO 8601 (ISO-leta imajo popolne tedne od ponedeljka do nedelje; prvi teden v letu po ISO vedno vsebuje 4. januar ali prvi četrtek navadnega leta), z ničlo. od 01 do 52 ali 53 (odvisno od leta) 14
Dan:
j dan v mesecu, brez uvodne ničle. 1 to 31 6
d dan v mesecu, z uvodno ničlo. od 01 do 31 06
z dan v letu (z začetkom pri 0) od 0 do 364 oz. 365 na prestopno leto 95
D Okrajšava za dan v tednu. Redko krajevno prilagojeno. od pon (Mon) do ned (Sun) čet
l Popolno ime dneva v tednu. Redko krajevno prilagojeno. od ponedeljka (Monday) do nedelje (Sunday) četrtek
N Dan v tednu po ISO 8601 (teden po ISO 8601). od 1 (za ponedeljek) do 7 (za nedeljo) 4
w številka dneva v tednu (ameriški teden). od 0 (za nedeljo, Sunday) do 6 (za soboto, Saturday) 4
Ura:
a am (med 01:00:00 in 12:59:59 na isti dan) ali pm, z malimi črkami (uporaba pri 12-urni obliki). am ali pm am
A Enako kot pri zgornji kodi a, le z velikimi črkami. AM ali PM AM
g 12-urna oblika ure brez uvodnih ničel (ena ali dve števki, za uporabo skupaj z am/pm ali AM/PM). od 1 do 12 6
h 12-urna oblika ure, z uvodno ničlo (dve števki, za uporabo skupaj z am/pm ali AM/PM). od 01 do 12 06
G 24-urna oblika ure, brez uvodne ničle (ena ali dve števki) od 0 do 23 6
H 24-urna oblika ure, z uvodno ničlo (dve števki). od 00 do 23 06
Minute in sekunde:
i Minuta z uvodno ničlo (dve števki). od 00 do 59 43
s Sekunda z uvodno ničlo (dve števki). od 00 do 59 38
U Sekunde od 1. januarja 1970 00:00:00 GMT naprej. od 0 do neskončno 1491461018
Drugo:
L Ali gre za prestopno leto. 1, kadar gre za prestopno leto, sicer 0. 0
t Število dni v mesecu. od 28 do 31 30
c V skladu z ISO 8601 oblikovan datum, enako kot {{#time:Y-m-dTH:i:s{{#time:+H:i|+0 ur}}}}. stalna dolžina niza 2017-04-06T06:43:38+00:00
r V skladu z RFC 2822 oblikovan datum, enako kot {{#time:D, j M Y H:i:s {{#time:+H:i|+0 ur}}}}. spremenljiva dolžina niza Thu, 06 Apr 2017 06:43:38 +0000

Naslednje kode za obliko so razširitve skladnje PHP:

Koda Opis
xn Oblikuje naslednjo numerično kodo kot surovo ASCII-število. Zgled: v hindiju {{ #time: H, xnH }} vrne ०६, 06.
xN Trajno oblikuje naslednjo numerično kodo kot surovo ASCII-število. Tako kot xn, razen da traja do konca niza oz. do ponovitve iste kode.
xr Oblikuje naslednjo numerično kodo kot rimsko številko. Deluje le za števila do 3000.
xg Vrne ime meseca v rodilniku. Namenjeno jezikom, kjer obstaja za taka imena razlika med rodilnikom in imenovalnikom.
xx Dobesedni x

Kateri koli neprepoznani znak bo vrnjen nespremenjen. Za pridobitev dobesednih znakov lahko uporabite tudi dva dogovora o navajanju.

  • Znaki v parnih narekovajih se obravnavajo dobesedno (narekovaji se odstranijo). Neparni narekovaji se obravnavajo kot dobesedni navedek. Zgled:
    • {{ #time: "Tekoči mesec je" F }} → Tekoči mesec je april
    • {{ #time: i's" }} → 43'38"
  • Podprta je tudi izpustitev z levo poševnico, kot deluje pri datumih v PHP. \H vrne dobesedni H, \" vrne dobesedni ".

V prihodnosti bo glede na potrebe uporabnikov razširitve morda dodanih še več kod za obliko. To lahko pomeni bolj popolno uvedbo kod PHP za obliko ali dodatne kode x.

Oblika parametra čas je identična obliki, ki jo uporablja funkcija strtotime() v PHP. Podpira tako absolutne kot relativne datume, npr. "December 11" in / ali "+10 hours", kar lahko uporabimo na primer za prilagoditev časovnega pasu. Za več podatkov glej priročnik tar GNU.

Zgledi[uredi | uredi kodo]

  • {{ #time: l, j F Y |20070304 }} vrne "nedelja, 4. marec 2007"
  • {{ #time: l, j F Y |, 2007-3-4 }} vrne "nedelja, 4. marec 2007"
  • {{ #time: l, j F Y | 4. March 2007 }} vrne "nedelja, 4. marec 2007"
  • {{ #time: l, j F Y | -32 days }} vrne "nedelja, 5. marec 2017" (pred 32 dnevi)
  • {{ #time: H:i | +6 hours }} vrne "12:43" (6 ur pozneje kot UTC)
  • {{ #time: H:i | 8:15 +6 hours }} vrne "14:15"
  • {{ #time: m/Y | -17 months }} vrne "11/2015" (pred 17 meseci)

V kombinaciji z uporabniško določenim oblikovanjem datumov:

  • {{ #time: l, [[j. F]] [[Y]] | 4 March 2007 }} vrne "nedelja, 4. marec 2007"
  • {{ #time: l, [[Y-m-d]] | 4 March 2007 }} vrne "nedelja, 2007-03-04"

Oba vrneta uporabniško določeno obliko. Kadar kateri izmed njiju ni bil določen kot preferenčni v nastavitvah, se med seboj razlikujeta.

Razpon[uredi | uredi kodo]

Razpon pravilnega delovanja sega od 1. januarja 1970 00:00:01 do 19. januarja 2038 03:14:07, ali od 1 do sekund po začetku leta 1970 (glej Year 2038 problem). Za datume, ki so zunaj tega območja, lahko uporabimo predloge za računanje datumov.

Datumi pred 1901 vrnejo sporočilo o napaki, datumi med 1901 in 1970 pa celo (morda odvisno od strežnika) napačen rezultat (!):

  • {{ #time:c|5 April 1967}} vrne 1967-04-05T00:00:00+00:00
  • {{ #time:c|5 April 1867}} vrne 1867-04-05T00:00:00+00:00

Nepopolni podatki[uredi | uredi kodo]

  • {{ #time:c|2007}} vrne 2007-04-06T00:00:00+00:00 (ni leto, temveč čas: danes, 20:07)
  • {{ #time:c|1997}} vrne 1997-04-06T00:00:00+00:00 (19:97 ni veljaven čas, zato se tolmači kot leto, vrne trenutni datum in čas v tem letu)
  • {{ #time:c|1967}} vrne 1967-04-06T00:00:00+00:00 (19:67 ni veljaven čas, zato se tolmači kot leto; vrne datum zunaj razpona, ki se spremeni na začetek veljavnega razpona)
  • {{ #time:c|April 2007}} vrne 2007-04-01T00:00:00+00:00 (začetek meseca)
  • {{ #time:c|5 April}} vrne 2017-04-05T00:00:00+00:00 (določeni datum tekočega leta)

29. februar[uredi | uredi kodo]

Posebno pozorni moramo biti pri 29. februarju, saj se {{#time:j|February 29}} spreminja z letom. Zgled:

  • {{ #time: j|February 29 2006 }} vrne 1
  • {{ #time: j|February 29 2008 }} vrne 29

#rel2abs:

{{#rel2abs:}} pretvori relativno pot v absolutno pot.

{{ #rel2abs: pot }}
{{ #rel2abs: pot | pot do osnove }}

Relativna pot je pot, ki se začne z '/', './' ali '../', vsebuje '/../' ali '/.' ali pa gre preprosto za niz '..' ali '.'. Č je podana pot do osnove, mora biti izražena z absolutno skladnjo.

Zgled:

  • Kadar leži na Pomoč:Foo/bar in kliče {{ #rel2abs: ../baz }}, bo rezultat Pomoč:Foo/baz
  • Kadar leži na Pomoč:Foo in kliče {{ #rel2abs: ../baz }}, bo rezultat baz
  • Kadar leži na Pomoč:Foo in kliče {{ #rel2abs: ../../baz }}, bo rezultat Napaka: Neveljavna globina poti: »Pomoč:Foo/../../baz« (poskus dostopanja do vozlišča višjega od korenskega vozlišča)
  • Kadar leži na {{ #rel2abs: ../baz | Pomoč:Bar/foo }}, bo rezultat Pomoč:Bar/baz
  • Kadar leži na {{ #rel2abs: Pomoč:Foo/bar/../baz }}, bo rezultat Pomoč:Foo/baz

Pri tem ni preverjanja, ali pot obstaja. To lahko dosežemo v kombinaciji s funkcijo {{#ifexist:}}:

{{ #ifexist: {{#rel2abs: .. }} | '..' obstaja | '..' ne obstaja }} gives '..' ne obstaja
{{ #ifexist: {{#rel2abs: . }} | '.' obstaja | '.' does not exist }} gives '.' obstaja

Opozorila[uredi | uredi kodo]

Tako kot druge funkcije za razčlenjevanje tudi to razširitev na predvidljiv način zadeva hrošč 5678. Povzetek: nedefinirane parametre lahko prepišejo ustrezajoči parametri; podrobnosti so opisane na straneh m:Help:ParserFunctions/5678 in pomoč za substitucijo. Substitucija je edini primer, kjer je to bistvenega pomena. Na definirane parametre to ne vpliva.

Substitucija[uredi | uredi kodo]

Uporaba subst: je pri funkcijah razčlenjevalnika mogoča, če le med subst: in # ni presledka. Za podrobnosti glej m:Help:Substitution. Vedite, da razen ob uporabi tehnike, kot je neobvezna substitucija, substitucija predloge s funkcijami razčlenjevalnika teh funkcij ne zamenja z njihovim rezultatom. To je pogosto neželeno.

Glej tudi predhodni razdelek.

Razpredelnice[uredi | uredi kodo]

V pogojnih konstruktih wikiskladnja z navpičnicami trenutno še ne deluje. Pomagate si lahko z dvema obhodnima potema:

  • Navpičnico lahko pred funkcijami razčlenjevalnika skrijete tako, da jo postavite v predlogo. Zgled je npr. m:Template:! (pogovor, povezave, uredi).
  • Uporabite lahko tudi HTML-skladnjo za razpredelnice.
  • Popolnoma prazne vrstice ali stolpci se ne prikažejo (glej tudi m:Help:Table). Prazne celice lahko na straneh, na katere ne vpliva hrošč 5569, preoblikujete tudi v lažne celice &nbsp;.

Sicer pa sta bila | in = v predlogah vedno težavna za uporabo.

Kadar odpove vse drugo, poskusite v svojih LocalSettings.php nastaviti $wgUseTidy=true;.

Izrazi[uredi | uredi kodo]

  • div ne omogoča celoštevilčnega deljenja in je odveč. Za realna deljenja uporabite / (poševnico).
  • mod uporablja PHP-jev operator %, ki se razlikuje od modulo-operatorjev v vseh drugih programskih jezikih. Glej tudi m:Template:mod (pogovor, povezave, uredi) in hrošč 6068.
  • mod včasih vrne napačne rezultate pri istih vnesenih vrednostih. Glej hrošč 6356 in m:Help:ParserFunctions/MOD10000. Posodobitev: zdi se, da pri vrednostih pod 1E+12 ni težav.
  • Veljavne rezultate funkcije #expr:, kot je 1.0E-7, vnos za #expr: še ne podpira:
    {{#expr:1.0E-7}} da 1.0E-7.
  • round 0 da v nekaterih okoliščinah namesto vrednosti 0 vrednost -0. Pri izrazu x se tej nenavadnosti izognete z vpisom 0+(x).

Pogojniški beli znaki[uredi | uredi kodo]

Ker pogojniki ob navpičnicah (in pri poimenovanih, ne pa tudi nepoimenovanih parametrih predloge) odstranijo uvodne in zaključne bele znake, ni takoj jasno, kako pogojno vstaviti beli znak ali zaporedje belih znakov. Kadar želimo vstaviti le presledke, lahko uporabimo HTML-kodo &#32;, ki vstavi " ".

Kadar želimo vstaviti nove vrstice ali drugačne bele znake, lahko med navpičnico in bele znake vstavimo nenatisljive bele znake:

prvi odstavek. {{#if:{{{paragraph}}}|<nowiki /> 

drugi odstavek.}}

prvi odstavek.

drugi odstavek.

Izvedba kode[uredi | uredi kodo]

v primeru pogojniških funkcij razčlenjevanja (if, ifeq, ifexist, ifexpr, switch), se wikibesedilo vsakega primera (del potem, del sicer itd.), četudi je izložek odvisen od pogoja, notranje "izvede"/"obdela"/"razčleni" neodvisno od tega, ali je pogoj izpolnjen. To zadeva:

Morda si želimo zmanjšati obdelavo na dejansko uporabljeno wikibesedilo, zmanjšati predrazširitveno vključitveno velikost, se izogniti nerazložljivim predmetom na seznamu povezav in vključitev in v seznamu želenih strani in se izogniti neželeni kaskadi zaščite. To lahko dosežemo tako, da z uporabo funkcije #ifexpr ipd. izberemo predlogo ali cilj povezave in celotno razčlenjevalno funkcijo razčlenjevanja postavimo v oklepaje, npr. {{ {{#ifexpr:..|a|b}} | parametri }} namesto {{ #ifexpr:.. | {{a|parametri}} | {{b |parametri}} }}. Kadar sicer-dela ni, lahko uporabimo slepo predlogo, npr. m:Template:x0 (pogovor, povezave, uredi):{{ {{#ifexpr:..|a|x0}} | parametri }} namesto {{ #ifexpr:.. | {{a|parameters}} }}. Kadar parametra nizov a in b nista enaka, lahko funkcijo razčlenjevanja razdelimo v funkcijo za del potem in funkcijo z nasprotnim pogojem za del sicer (ali isti pogoj in le del sicer): {{ {{#ifexpr:..|a|x0}} | parametri niza a }}{{ {{#ifexpr:..|x0|b}} | parametri niza b }} namesto {{ #ifexpr:.. | {{a|parametri niza a}} | {{b |parametri niza b}} }}.

Podobno lahko v primeru povezav namesto {{ #ifexpr:.. | [[a]] | [[b]] }} uporabimo [[ {{#ifexpr:..|a|b}} ]]. Kadar dela sicer ni, lahko namesto {{ #ifexpr:.. | [[a]] }} uporabimo {{#ifexpr:..|[[ {{#ifexpr:..|a}} ]] }}. V tem primeru moramo pogoj podvojiti: zaradi notranje kopije pogoja dobimo bodisi "[[a]]" ali "[[]]"; v prvem primeru se v tabelo povezav na stran doda povezava, v drugem v tabeli povezav povezave ni. Z zunanjo kopijo pogoja se izognemo prikazu "[[]]" pri neizpolnjenem pogoju.

V primeru gnezdenih pogojnih funkcij razčlenjevanja moramo za vsako povezavo skopirati celotno gnezdenje pogojniških razčlenjevalnih funcij v oglate oklepaje povezave. Podobno lahko to storimo z zavitimi oklepaji predloge. Kadar dobimo "{{}}", to v tabelo povezav na predlogo ne umesti nobenega predmeta in se zaradi pogojniških razčlenjevalnih funkcij, ki niz obdajajo, ne prikaže.

Glej tudi tolmačenje funkcije razčlenjevanja kot predloge.

Namestitev[uredi | uredi kodo]

Za trenutno različico razširitve ParserFunctions mora biti nameščen php5.

V novo mapo ParserFunctions v svoji mapi z razširitvami prenesite naslednje datoteke.

Če nimate php5, uporabite naslednje datoteke (starejša redakcija):

Nato na konec svojega mw:Manual:LocalSettings.php dodajte:

require_once( "$IP/extensions/ParserFunctions/ParserFunctions.php" );

Če se prikaže sporočilo o napaki, npr. "Warning: require_once(/extensions/ParserFunctions/ParserFunctions.php) [function.require-once]: failed to open stream:", vrstico zamenjajte z:

require_once( 'extensions/ParserFunctions/ParserFunctions.php' );

Brskanje po drevesu kode:

1.8 in nadaljnje različice[uredi | uredi kodo]

V 1.8 in nadaljnjih različicah delujejo vse funkcije razčlenjevalnika. Podprte so tudi krajevno prilagojene oblike.

1.7[uredi | uredi kodo]

V 1.7 delujejo vse funkcije razčlenjevalnika, vendar pa samo v angleščini. Hkratna uporaba razširitve m:Cite lahko povzroči težave; gl. [1].

1.6[uredi | uredi kodo]

Ob vključitvi funkcij razčlenjevalnika kode 1.6 se lahko prikažejo nekatera opozorila. Težavo popravite tako, da v ParserFunctions.php odstranite naslednjo vrstico (vrstica 10):

$wgHooks['LanguageGetMagic'][]       = 'wfParserFunctionsLanguageGetMagic';

Za delovanje funkcij #time, morate v mapo extensions/ParserFunctions naložiti tudi SprintfDateCompat.php. Vendar težava ne bo resnično rešena.

Večina funkcij razčlenjevalnika kode (razen #if) deluje enako dobro tudi v MediaWiki 1.6, vendar pa je njihova skladnja brez znaka '#'. Če želite uporabiti znak '#', poiščite naslednji odsek razširitve ParserFunctions.php:

 $wgParser->setFunctionHook( 'expr', array( &$wgExtParserFunctions, 'expr' ) );
 $wgParser->setFunctionHook( 'if', array( &$wgExtParserFunctions, 'ifHook' ) );
 $wgParser->setFunctionHook( 'ifeq', array( &$wgExtParserFunctions, 'ifeq' ) );
 $wgParser->setFunctionHook( 'ifexpr', array( &$wgExtParserFunctions, 'ifexpr' ) );
 $wgParser->setFunctionHook( 'switch', array( &$wgExtParserFunctions, 'switchHook' ) );
 $wgParser->setFunctionHook( 'ifexist', array( &$wgExtParserFunctions, 'ifexist' ) );

Zamenjajte ga z:

 $wgParser->setFunctionHook( '#expr', array( &$wgExtParserFunctions, 'expr' ) );
 $wgParser->setFunctionHook( '#if', array( &$wgExtParserFunctions, 'ifHook' ) );
 $wgParser->setFunctionHook( '#ifeq', array( &$wgExtParserFunctions, 'ifeq' ) );
 $wgParser->setFunctionHook( '#ifexpr', array( &$wgExtParserFunctions, 'ifexpr' ) );
 $wgParser->setFunctionHook( '#switch', array( &$wgExtParserFunctions, 'switchHook' ) );
 $wgParser->setFunctionHook( '#ifexist', array( &$wgExtParserFunctions, 'ifexist' ) );

Preprosto nadomestilo za #if -

 function ifHook( &$parser, $test = '', $then = '', $else = '' ) {
  if ($test !== '') {

v vrstici 57 zamenjajte z:

 function ifHook( &$parser, $test = '', $then = '', $else = '' ) {
  if ( (string)$test !== '' ){

Vendar pa pri PHP 4.3.9 zgornji popravek domnevno ne deluje.

Glej tudi[uredi | uredi kodo]

Zunanje povezave[uredi | uredi kodo]