Hjelp:Parserfunksjoner

Fra Wikipedia, den frie encyklopedi
Hopp til: navigasjon, søk

Utvidelsen ParserFunctions tilbyr ytterligere 11 parserfunksjoner som supplement til de magiske ordene, som allerede finnes i MediaWiki. Alle parserfunksjonene denne utvidelsen tilbyr, tar formen:

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

#expr[rediger | rediger kilde]

Mal:Hl1 |

Type

Mal:Hl1 |

Operatorer

Mal:Hl2 |

Gruppering (parenteser)

( )
Mal:Hl2 |

Tall

1234.5   e (2.718)   pi (3.142)
Mal:Hl2 |

binær operator e   unær +,-

Mal:Hl2 |

Unær

not ceil trunc floor abs exp ln sin cos tan acos asin atan
Mal:Hl2 rowspan="3" |

Binær

^
* / div mod
+ -
Mal:Hl2 |

Avrunding

round
Mal:Hl2 rowspan="3" |

Logikk

= != <> > < >= <=
and
or


Denne funksjonen evaluerer et matematisk uttrykk og returnerer den utregnede verdien.

{{#expr: uttrykk }}


De tilgjengelige operatorene er listet til høyre, i presedensrekkefølge. Se meta:Help:Calculation eller Hjelp:Utregning for flere detaljer om hver enkelt operators funksjon. Det returnerte resultatets nøyaktighet og format vil variere avhengig av operativsystemet på serveren som kjører wikien, og nettstedsspråkets tallformat.

Ved evaluering ved hjelp av boolsk algebra, vil null evalueres til false og en hvilken som helst ikke-null verdi, positiv eller negativ, evalueres til true:

{{#expr: 1 and -1 }}1
{{#expr: 1 and 0 }}0


Et tomt input-uttrykkk returnerer en tom streng. Ugyldige uttrykk returnerer en av mange feilmeldinger, som kan fanges ved hjelp av funksjonen #iferror:

{{#expr: }}
{{#expr: 1+ }}Uttrykksfeil: Mangler operand for +
{{#expr: 1 foo 2 }}Uttrykksfeil: Ugjenkjennelig ord «foo»


Rekkefølgen av addisjons- eller subtraksjonsoperander før eller etter et tall er betydningsfullt, og kan tolkes som en positiv eller negativ verdi istedenfor som en operand med feilaktig input:

{{#expr: +1 }}1
{{#expr: -1 }}-1
{{#expr: + 1 }}1
{{#expr: - 1 }}-1


Legg merke til at hvis du bruker output fra magiske ord, må du råformatere dem for å fjerne kommaer og oversette tallene. For eksempel resulterer {{NUMBEROFUSERS}} i 403 807. Hvis vi ønsker 403 807, kan dette oppnås ved {{formatnum:{{NUMBEROFUSERS}}|R}} eller {{formatnum:{{NUMBEROFUSERS:R}}}}. Dette er spesielt viktig i noen språk der tall oversettes, for eksempel i Bengali.

{{#expr:{{NUMBEROFUSERS}}+100}} Uttrykksfeil: Ugjenkjennelig skilletegn «�»
{{#expr:{{formatnum:{{NUMBEROFUSERS}}|R}}+100}}403907


{{ Mal:TNTN | Operatoren mod gir feil resultater for noen verdier av det andre argumentet:

{{#expr: 123 mod (2^64-1)}}Deling på null

(resulterer i en tom streng; burde være 123)
}}

Crystal Clear app ktip.png

Hvis du vil regne basert på datoer (hvis nåværende dato og tid er etter noen annen dato og tid), konverter først tiden til antall sekunder etter 1. januar 1970 ved bruk av {{#time: U }}, så kan du rett og slett legge sammen og trekke fra datoer.

Avrunding[rediger | rediger kilde]

Avrunder tallet til venstre til et multiplum av 1/10 opphøyd i en potens, med eksponenten lik den avrundede verdien av tallet til høyre.

Bruk henholdsvis unær ceil eller floor for å runde av oppover eller nedover.

Mal:Hl1 |

Testtilfelle

Mal:Hl1 |

Resultat

Mal:Hl1 |

Avrundingsmetode

{{#expr: 1/3 round 5 }} 0.33333

Siste siffer er < 5, så ingen tilsynelatende avrunding inntreffer

{{#expr: 1/6 round 5 }} 0.16667

Siste siffer er >= 5, så det rundes av oppover

{{#expr: 8.99999/9 round 5 }} 1

Igjen, resultatet rundes av oppover på siste siffer, som resulterer i ytterligere avrunding

{{#expr: 1234.5678 round -2 }} 1200

Rundet av til nærmeste 100 fordi negative verdier runder av til venstre for desimaltegnet

{{#expr: 1234.5678 round 2 }} 1234.57

Rundet av til nærmeste hundredel siden positive verdier runder av til høyre for desimaltegnet

{{#expr: 1234.5678 round 2.3 }} 1234.57

Desimaler i avrundingsindeksen gjør ingen forskjell i det avrundede resultatet

{{#expr: trunc 1234.5678 }} 1234

Desimaldel avkortet (hogget av)

colspan=3 Mal:Hl2 |

Avrunding til nærmeste heltall

{{#expr: 1/3 round 0 }} 0

Ned til nærmeste heltall, som er null

{{#expr: 1/2 round 0 }} 1

Opp til nærmeste heltall, som er en

{{#expr: 3/4 round 0 }} 1

Opp til nærmeste heltall, som er en

{{#expr: -1/3 round 0 }} -0

Opp til nærmeste heltall, som er null
{{ Mal:TNTN |

Det negative fortegnet på null kan forårsake likhets-uoverensstemmelser}}

{{#expr: -1/2 round 0 }} -1

Ned til nærmeste heltall, somk er negativ en

{{#expr: -3/4 round 0 }} -1

Ned til nærmeste heltall, som er negativ en

colspan=3 Mal:Hl2 |

Avrunding opp eller ned med ceil og floor

{{#expr: ceil(1/3) }} 1

Opp til neste større heltall, som er en

{{#expr: floor(1/3) }} 0

Ned til neste mindre heltall, som er null

{{#expr: ceil(-1/3) }} -0

Opp til neste større heltall, som er null
{{ Mal:TNTN | Det negative fortegnet på null kan forårsake likhets-uoverensstemmelser}}

{{#expr: floor(-1/3) }} -1

Ned til neste mindre heltall, som er negativ en

{{#expr: ceil 1/3 }} 0.33333333333333

Ikke avrundet siden 1 allerede er et heltall
{{ Mal:TNTN | Tolket som (ceil 1)/3, ikke ceil(1/3) som du kanskje forventer}}

#if[rediger | rediger kilde]

Denne funksjonen evaluerer en teststreng og avgjør hvorvidt den er tom. En teststreng inneholdende bare blanktegn (mellomrom, tabulator, linjeskift) betraktes som tom.

{{#if:

teststreng | verdi hvis teststrengen ikke er tom | verdi hvis teststrengen er tom (eller bare blanktegn) }}

{{#if:

første parameter | andre parameter | tredje parameter }}


Denne funksjonen tester først om hvorvidt den første parameteren er tom. Hvis første parameter ikke er tom, viser funksjonen det andre argumentet. Argument er det samme som parameter. Hvis den første parameteren er tom eller bare inneholder blanktegn, viser funksjonen det tredje argumentet.

{{#if: | ja | nei}}nei
{{#if: streng | ja | nei}}ja
{{#if:      | ja | nei}}nei
{{#if:


| ja | nei}}
nei


Teststrengen tolkes alltid som ren tekst, så matematiske uttrykk blir ikke evaluert:

{{#if: 1==2 | ja | nei }}ja
{{#if: 0 | ja | nei }}ja


Begge eller en hvilken som helst av returverdiene kan utelates:

{{#if: foo | ja }} ja
{{#if: | ja }}
{{#if: foo | | nei}}


Funksjonen kan nestes. For å gjøre dette nester man den indre #if-funksjonen i sin fulle form på plassen til den tredje parameteren i den omsluttende #if-funksjonen. En dybde på minst sju nivåer av nesting er mulig, selv om dette kan avhenge av wikien eller en minnebegrensning.

  • Eksempel: {{#if: teststreng | verdi hvis teststrengen ikke er tom | {{#if: teststreng | verdi hvis teststrengen ikke er tom | verdi hvis teststrengen er tom (eller bare blanktegn) }} }}

Se Hjelp:Parserfunksjoner i maler for flere eksempler på denne parserfunksjonen.

#ifeq[rediger | rediger kilde]

Denne parserfunksjonen sammenligner to strenger og avgjør hvorvidt de er identiske.

{{#ifeq: streng 1 | streng 2 | verdi hvis identiske | verdi hvis forskjellige }}

Hvis begge strenger er gyldige numeriske verdier, blir strengene sammenlignet numerisk:

{{#ifeq: 01 | 1 | like | ikke like}}like
{{#ifeq: 0 | -0 | like | ikke like}}like
{{#ifeq: 1e3 | 1000 | like | ikke like}}like
{{#ifeq: {{#expr:10^3}} | 1000 | like | ikke like}}like

Ellers sammenlignes strengene som tekst. Denne sammenligningen er case sensitive:

{{#ifeq: foo | bar | like | ikke like}}ikke like
{{#ifeq: foo | Foo | like | ikke like}}ikke like
{{#ifeq: "01" | "1" | like | ikke like}}ikke like  

(sammenlign med det lignende eksemplet ovenfor, uten anførselstegn)

{{#ifeq: 10^3 | 1000 | like | ikke like}}ikke like  

(sammenlign med det lignende eksemplet ovenfor, med #expr)


Som et praktisk eksempel, gitt en eksisterende mal {{Størrelse}} som brukes til å sette standard størrelser for korte og lange (små og store) mengder, definert som:

{{#ifeq: {{{1|}}} | kort | 20 | 40}}


gir følgende resultat

{{størrelse|kort}}20
{{størrelse|20}}40
{{størrelse}}40

{{ Mal:TNTN | Numeriske sammenligninger med #ifeq og #switch er ikke ekvivalente med sammenligninger med #expr:

{{#ifeq: 12345678901234567 | 12345678901234568 | like | ikke like}}ikke like
{{#switch: 12345678901234567 | 12345678901234568 = like | ikke like}}ikke like


fordi PHP derimot sammenligner to tall av typen integer:

{{#ifexpr: 12345678901234567 = 12345678901234568 | like | ikke like}}like


fordi MediaWiki konverterer bokstavelige tall (literal numbers) i uttrykk til typen float, som, for alle store heltall slik som disse, involverer avrunding.

}}

{{ Mal:TNTN | Tagger og parserfunksjoner inni parsertagger (slik som <nowiki>) blir midlertidig erstattet av en unik kode. Dette påvirker sammenligninger:

{{#ifeq: <nowiki>foo</nowiki> | <nowiki>foo</nowiki> | like | ikke like}}ikke like
{{#ifeq: <math>foo</math> | <math>foo</math> | like | ikke like}}ikke like
{{#ifeq: {{#tag:math|foo}} | {{#tag:math|foo}} | like | ikke like}}ikke like
{{#ifeq: [[foo]] | [[foo]] | like | ikke like}}like


Hvis strengene som skal sammenlignes er gitt som like kall på den samme malen som inneholder slike tagger, er betingelsen sann, men i tilfellet med to maler med identisk innhold som inneholder slike tagger er den ikke sann. }}

#iferror[rediger | rediger kilde]

Denne funksjonen tar en inputstreng og returnerer ett av to resultater; funksjonen evaluerer til true hvis inputstrengen inneholder et HTML-objekt med class="error", som er generert av andre parserfunksjoner slik som #expr, #time og #rel2abs, mal-feil slik som løkker og rekursjoner, og andre "failsoft" parserfeil.

{{#iferror: teststreng | verdi hvis feil | verdi hvis korrekt }}

En eller begge returstrenger kan utelates. Hvis strengen korrekt utelates, blir teststreng returnert hvis den ikke er feilaktig. Hvis strengen feil også utelates, blir en tom streng returnert i tilfelle en feil:

{{#iferror: {{#expr: 1 + 2 }} | feil | korrekt }}korrekt
{{#iferror: {{#expr: 1 + X }} | feil | korrekt }}feil
{{#iferror: {{#expr: 1 + 2 }} | feil }}3
{{#iferror: {{#expr: 1 + X }} | feil }}feil
{{#iferror: {{#expr: 1 + 2 }} }}3
{{#iferror: {{#expr: 1 + X }} }}
{{#iferror: {{#expr: . }} | feil | correct }}korrekt
{{#iferror: <strong class="error">a</strong> | feil | correct }}feil

#ifexpr[rediger | rediger kilde]

Denne funksjonen evaluerer et matematisk uttrykk og returnerer en av to strenger avhengig av den boolske verdien av resultatet:

{{#ifexpr: uttrykk | verdi hvis sann | verdi hvis usann }}

Inputten uttrykk evalueres eksakt på samme måte som #expr ovenfor, og de samme operatorene er tilgjengelige. Outputten evalueres deretter som et boolsk uttrykk.

Et tomt input-uttrykk evalueres til usann:

{{#ifexpr: | ja | nei }}nei

Som nevnt ovenfor, evalueres null til usann og en hvilken som helst ikke-null verdi evalueres til sann, så denne funksjonen er det samme som å bare bruke #ifeq og #expr:

{{#ifeq: {{#expr: uttrykk }} | 0 | verdi hvis usann | verdi hvis sann }}

med unntak av et tomt eller feil input-uttrykk (en feilmelding behandles som en tom streng; den er ikke lik null, så vi får verdi hvis sann).

{{#ifexpr: = | ja | nei }} Uttrykksfeil: Uventet =-operator

sammenlignet med

{{#ifeq: {{#expr: = }} | 0 | nei | ja }} ja

En eller begge returverdier kan utelates; ingen output gis for deler som er tomme:

{{#ifexpr: 1 > 0 | ja }}ja
{{#ifexpr: 1 < 0 | ja }}
{{#ifexpr: 0 = 0 | ja }} ja
{{#ifexpr: 1 > 0 | | nei}}
{{#ifexpr: 1 < 0 | | nei}} nei
{{#ifexpr: 1 > 0 }}

#ifexist[rediger | rediger kilde]

Denne funksjonen tar en inputstreng, tolker den som en sidetittel, og returnerer en av to verdier avhengig av om hvorvidt siden eksisterer på den lokale wikien.

{{#ifexist: sidetittel | verdi hvis den eksisterer | verdi hvis den ikke eksisterer }}

Funksjonen evalueres til sann hvis siden eksisterer, uansett om den inneholder noe, er synlig tom (inneholder bare kategorilenker eller magiske ord, men ikke synlig innhold), er tom eller er en omdirigering. Det er bare rødlenkede sider som gjør at funksjonen evalueres til usann, dette gjelder sider som er uopprettet eller slettet.

{{#ifexist: Hjelp:Parserfunksjoner | eksisterer | eksisterer ikke }}eksisterer
{{#ifexist: XXHjelp:ParserfunksjonerXX | eksisterer| eksisterer ikke }}eksisterer ikke

Denne funksjonen evalueres til sann for systemmeldinger som er tilpasset, og for spesialsider som er definert av softwaren.

{{#ifexist: Spesial:Overvåkningsliste | eksisterer | eksisterer ikke }}eksisterer
{{#ifexist: Spesial:IP-sjekk | eksisterer | eksisterer ikke }}eksisterer

(fordi utvidelsen Mal:Mediawiki er installert på denne wikien)

{{#ifexist: MediaWiki:Copyright | eksisterer | eksisterer ikke }}eksisterer ikke

(fordi MediaWiki:Copyright ikke har blitt tilpasset)

Hvis en side kontrollerer et mål ved hjelp av #ifexist:, så vil den siden vises i listen Lenker hit for målsiden. Så hvis koden {{#ifexist:Foo}} var lagt inn live på denne siden (Hjelp:Parserfunksjoner), ville Spesial:Lenker hit/Foo listet opp Hjelp:Parserfunksjoner.

På wikier med delt medielagringssted kan #ifexist: brukes til å kontrollere om en fil har blitt lastet opp til lagringsstedet, men ikke selve wikien:

{{#ifexist: Fil:Example.png | eksisterer | eksisterer ikke }}eksisterer ikke
{{#ifexist: Image:Example.png | eksisterer | eksisterer ikke }}eksisterer ikke
{{#ifexist: Medium:Example.png | eksisterer | eksisterer ikke }}eksisterer

Hvis en lokal beskrivelsesside har blitt opprettet for filen, er resultatet eksisterer for alle tilfeller ovenfor.

#ifexist: virker ikke med interwikilenker.

ifexist-begrensninger[rediger | rediger kilde]

#ifexist: regnes som en "prosesskrevende parserfunksjon", bare et begrenset antall kan inkluderes på en enkelt side (heriblant funksjoner inni transkluderte maler). Når grensen er nådd, vil alle gjenstående #ifexist: automatisk returnere usann, samme om målsiden eksisterer eller ikke, og siden kategoriseres i Kategori:Sider med for mange prosesskrevende parserfunksjoner. Navnet på sporingskategorien kan variere avhengig av innholdsspråket på din wiki.

I noen tilfeller er det mulig å etterligne ifexist-effekten med css, ved å bruke selektorene a.new (for å velge lenker til ikke-eksisterende sider) eller a:not(.new) (for å velge lenker til eksisterende sider). Videre kan man også øke grensen i LocalSettings.php hvis det trengs, ettersom grensen for antall prosesskrevende parserfunksjoner som kan brukes på en side er kontrollert av $wgExpensiveParserFunctionLimit.

#rel2abs[rediger | rediger kilde]