Extension:ParserFunctions/Help/sl

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

Funkcije

 * 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. <h3 style="background: beige">#expr:


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

#expr:
Funkcija expr</tt> 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</tt>. Skladnja je naslednja:

Sledi seznam podprtih operatorjev. Za več podrobnosti glej 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 (=, !=, &lt;, &gt; 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.

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 .

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

<h3 style="background: beige">#if:

Funkcija je konstrukt vrste če-potem-sicer. Njena skladnja je:

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:

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

<h3 style="background: beige">#ifeq:

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

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:


 * vrne
 * vrne

Primerjava nizov upošteva tudi velikost črk:
 * vrne


 * 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:&#58;


 * Nedoločen parameter brez privzete vrednosti šteje v primerjavi kot niz, ki sestoji iz oznake&#58;

<h3 style="background: beige">#ifexist:

Funkcija vrne enega od dveh rezultatov, odvisno od tega, ali določena stran obstaja.

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


 * vrne, kajti Foo obstaja
 * vrne, saj je foo v kanonični obliki obstoječi Foo
 * vrne, saj FOO ne obstaja
 * , četudi m:Help:Calculation obstaja, zaradi interwikipredpone vrne.

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, razen da je rezultat za interwiki-povezavo pozitiven. Interwikipovezavo lahko obravnavate tudi z.

<h3 style="background: beige">#ifexpr:

Funkcija obravnava matematični izraz in glede na rezultat vrne enega od dveh nizov.

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


 * Trenutno da besedilo sicer tudi prazen izraz&#58;
 * vrne


 * Č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)&#58;
 * -- rezultata ni, torej je " 1/" pravilen izraz.
 * -- "1=2" je pravilen booleanski izraz (ne smemo ga zamenjevati z izrazom z vrednostjo 1, ki predstavlja "prav")
 * -- "1E2" v izrazih ni dovoljeno
 * -- "1/0" ni dovoljeno
 * -- "1/0" ni dovoljeno


 * ("a=b" ni dovoljeno, za primerjavo nizov uporabi #ifeq.

Primer uporabe:

Za uporabo glej tudi.

<h3 style="background: beige">#switch:

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

&lt;primerjalna vrednost&gt; | &lt;vrednost1&gt; = &lt;rezultat1&gt; | &lt;vrednost2&gt; = &lt;rezultat2&gt; | ... | &lt;vrednostn&gt; = &lt;rezultatn&gt; | &lt;prednastavljeni rezultat&gt;

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 :

&lt;primerjalna vrednost&gt; | &lt;vrednost&gt; = &lt;rezultat&gt; | #default = &lt;prednastavljeni rezultat&gt;

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

&lt;primerjalna vrednost&gt; | &lt;vrednost1&gt; | &lt;vrednost2&gt; | &lt;vrednost3&gt; = &lt;rezultat1, 2, 3&gt; | ... | &lt;vrednostn&gt; = &lt;rezultatn&gt; | &lt;prednastavljeni rezultat&gt;

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&#58;
 * vrne
 * vrne


 * Ujemajoča se vrednost je lahko prazna, zato sta naslednja konstrukta enakovredna&#58;
 * vrne
 * vrne

Primerjava nizov razlikuje velikost črk:
 * vrne
 * vrne
 * vrne

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

Da bi bil stavek #switch neodvisen od velikost črk, lahko dosežemo s konstruktom ali
 * vrne
 * vrne
 * vrne

To se navadno uporablja v predlogah, ko želimo neodvisnost od velikosti črk pri vrednostih parametrov.: | a | b | c = abc or ABC | A | B | C = Okvara spomina zaradi kozmičnega sevanja | #default = N/A gives

Namesto #ifeq lahko uporabimo tudi #switch:
 * vrne
 * vrne

<h3 style="background: beige">#time:

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

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  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.

Naslednje kode za obliko so razširitve skladnje PHP:

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:
 * &rarr;
 * &rarr;
 * 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</tt>" in / ali "+10 hours</tt>", kar lahko uporabimo na primer za prilagoditev časovnega pasu. Za več podatkov glej priročnik tar GNU.

Zgledi

 * vrne ""
 * vrne ""
 * vrne ""
 * vrne "" (pred 32 dnevi)
 * vrne "" (6 ur pozneje kot UTC)
 * vrne ""
 * vrne "" (pred 17 meseci)

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

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
Razpon pravilnega delovanja sega od 1. januarja 1970 00:00:01 do 19. januarja 2038 03:14:07, ali od 1 do $$2^{31}-1$$ 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, npr. .

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



Nepopolni podatki

 * (ni leto, temveč čas: danes, 20:07)
 * (19:97 ni veljaven čas, zato se tolmači kot leto, vrne trenutni datum in čas v tem letu)
 * (19:67 ni veljaven čas, zato se tolmači kot leto; vrne datum zunaj razpona, ki se spremeni na začetek veljavnega razpona)
 * (začetek meseca)
 * (določeni datum tekočega leta)

29. februar
Posebno pozorni moramo biti pri 29. februarju, saj se spreminja z letom. Zgled:


 * vrne
 * vrne

<h3 style="background: beige">#rel2abs:

pretvori relativno pot v absolutno pot.

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

Zgled:
 * Kadar leži na Pomoč:Foo/bar</tt> in kliče, bo rezultat </tt>
 * Kadar leži na Pomoč:Foo</tt> in kliče, bo rezultat </tt>
 * Kadar leži na Pomoč:Foo</tt> in kliče, bo rezultat </tt>
 * Kadar leži na, bo rezultat </tt>
 * Kadar leži na, bo rezultat </tt>

Pri tem ni preverjanja, ali pot obstaja. To lahko dosežemo v kombinaciji s funkcijo :
 * gives </tt>
 * gives <tt></tt>

Opozorila
Tako kot druge funkcije razčlenjevanja 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 Help:ParserFunctions/5678 in pomoč za substitucijo. Substitucija je edini primer, kjer je to bistvenega pomena. Na definirane parametre to ne vpliva.

Substitucija
Uporaba subst: je pri funkcijah razčlenjevalnika mogoča, če le med subst: in # ni presledka. Za podrobnosti glej 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
V pogojnih konstruktih wikiskladnja z navpičnicami trenutno še ne deluje. Pomagate si lahko z dvema obhodnima potema: Sicer pa sta bila <tt>|</tt> in <tt>=</tt> v predlogah vedno težavna za uporabo.
 * Navpičnico lahko pred funkcijami razčlenjevalnika skrijete tako, da jo postavite v predlogo. Zgled je npr..
 * Uporabite lahko tudi HTML-skladnjo za razpredelnice.
 * Popolnoma prazne vrstice ali stolpci se ne prikažejo (glej tudi Help:Table). Prazne celice lahko na straneh, na katere ne vpliva hrošč 5569, preoblikujete tudi v lažne celice <tt>&amp;nbsp;</tt>.

Kadar odpove vse drugo, poskusite v svojih  nastaviti.

Izrazi

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

Pogojni beli znaki
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, ki vstavi "&#32;".

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

prvi odstavek.

prvi odstavek.

Izvedba kode
v primeru pogojniških funkcij razčlenjevanja (<tt>if</tt>, <tt>ifeq</tt>, <tt>ifexist</tt>, <tt>ifexpr</tt>, <tt>switch</tt>), 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:
 * predrazširitveno velikost vključitve (glej w:Wikipedia:Template limits)
 * v primeru pogojniških povezav in vključitev: tabelo povezav na stran in tabelo povezav na predlogo; zato tudi:
 * sezname povezav z določene strani in vanju vključene strani (na urejevalnem polju izvorne strani in povratne povezave ciljne strani
 * - vključitev v del potem ali del sicer itd. v klicu pogojniške razčlenjevalne funkcije povzroči zaščito vključene strani neodvisno od pogoja; glej tudi Help:Cascading protection demo
 * drugo, glej npr. VariablesExtension
 * drugo, glej npr. VariablesExtension

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. namesto. Kadar sicer-dela ni, lahko uporabimo slepo predlogo, npr. : namesto. 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):  namesto.

Podobno lahko v primeru povezav namesto uporabimo. Kadar dela sicer ni, lahko namesto uporabimo. 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.

Namestitev

 * ''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.


 * Expr.php
 * ParserFunctions.php
 * ParserFunctions.i18n.php

Če nimate php5, uporabite naslednje datoteke (starejša redakcija):
 * Expr.php
 * ParserFunctions.php

Nato na konec svojega 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:


 * ParserFunctions v MediaWiki SVN

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

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

1.6
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

 * Help:Calculation
 * Help:Magic words
 * StringFunctions
 * DynamicFunctions
 * m:Category:Templates using ParserFunctions
 * sl:Kategorija:Predloge s ParserFunctions

Zunanje povezave

 * Razprava o ParserFunctions v arhivu dopisnega seznama Wikitech-l