Aiuto:Funzioni parser
Questa pagina descrive le funzioni parser che possono essere inserite nel wikicodice per elaborare stringhe e numeri. Sono utili in particolare nella creazione di template. Le funzioni parser possono utilizzare anche le variabili di Mediawiki.
Alcune sono fornite dall'estensione MediaWiki ParserFunctions e hanno sintassi:
{{#nomefunzione: argomento 1 | argomento 2 | argomento 3...}}
Altre sono funzioni base di MediaWiki e generalmente hanno sintassi:
{{nomefunzione: argomento }}
Gli spazi attorno a {{
, }}
e |
non sono rilevanti nella sintassi, quindi ad esempio {{ #nomefunzione: argomento 1 | argomento 2 }}
è equivalente a {{#nomefunzione:argomento 1|argomento 2}}
mentre possono influenzare il codice: {{#time : Y}}
non restituisce l'anno a causa dello spazio prima dei due punti (:).
Funzioni più complesse di queste possono essere realizzate tramite i moduli.
expr
modificaLa funzione expr
elabora operazioni matematiche. Gli operatori supportati, in ordine di precedenza, sono:
Operatore | Operazione | Esempio |
---|---|---|
- | Negazione unaria | {{#expr: - 7}} = -7 |
exp | Esponenziale | {{#expr: exp 3}} = 20.085536923188 |
ln | Logaritmo naturale | {{#expr: ln 100}} = 4.6051701859881 |
abs | Valore assoluto | {{#expr: abs -2}} = 2 |
trunc | Arrotondamento per difetto | {{#expr: trunc 1.5}} = 1 {{#expr: trunc -1.5}} = -1 |
floor | Arrotondamento verso il basso | {{#expr: floor 1.5}} = 1 {{#expr: floor -1.5}} = -2 |
ceil | Arrotondamento verso l'alto | {{#expr: ceil 1.5}} = 2 {{#expr: ceil -1.5}} = -1 |
sin, cos, tan | Funzioni trigonometriche (in radianti) | {{#expr: sin 1}} = 0.8414709848079 |
asin, acos, atan | Funzioni trigonometriche inverse | {{#expr: asin 0.5}} = 0.5235987755983 |
not | NOT logico | {{#expr: not 7}} = 0 |
^ | Elevamento a potenza | {{#expr: 30 ^ 7}} = 21870000000 |
* | Moltiplicazione | {{#expr: 30 * 7}} = 210 |
/ oppure div | Divisione | {{#expr: 30 / 7}} = 4.2857142857143 |
mod | Modulo, restituisce il resto di una divisione | {{#expr: 30 mod 7}} = 2 |
+ | Addizione | {{#expr: 30 + 7}} = 37 |
- | Sottrazione | {{#expr: 30 - 7}} = 23 |
round | Arrotonda al numero più vicino. Il secondo operando è il numero di decimali; se è negativo, arrotonda a 10, 100... |
{{#expr: 1.2345 round 2}} = 1.23 {{#expr: 1.2378 round 2}} = 1.24 {{#expr: 5432 round -2}} = 5400 |
= | Uguaglianza | {{#expr: 30 = 7}} = 0 |
<> oppure != | Disuguaglianza | {{#expr: 30 <> 7}} = 1 |
< | Minore | {{#expr: 30 < 7}} = 0 |
> | Maggiore | {{#expr: 30 > 7}} = 1 |
<= | Minore o uguale | {{#expr: 30 <= 7}} = 0 |
>= | Maggiore o uguale | {{#expr: 30 >= 7}} = 1 |
and | AND logico | {{#expr: 30 and 7}} = 1 |
or | OR logico | {{#expr: 30 or 7}} = 1 |
( ) | Parentesi | {{#expr: (30 + 7) * 7 }} = 259 |
I numeri devono essere inseriti in notazione informatica, senza separatori di migliaia e con il punto come separatore decimale, ad es. 12345.67
; vengono restituiti allo stesso modo in uscita. Gli spazi tra gli operatori non sono obbligatori.
Gli operatori booleani considerano 0 come falso e ogni numero diverso da zero come vero. In uscita il vero viene restituito come 1.
Sono disponibili le costanti "e" (numero di Eulero) e "pi" (pi greco).
Esempio:
{{ #expr: (100 - 32) / 9 * 5 round 0 }}
restituisce:
38
che è 100 °F in °C, arrotondato al numero intero più vicino.
Le pagine che contengono errori nelle funzioni expr (espressioni mal formate, divisioni per zero...) vengono inserite in Categoria:Pagine con errori nelle espressioni.
if
modificaLa funzione if
è un costrutto if-then-else. Sintassi:
{{ #if: <condizione> | <allora testo> | <altrimenti testo> }}
Se la condizione consiste in una stringa vuota o uno spazio, allora è considerata falsa, e viene restituito altrimenti testo. In caso contrario, viene restituito allora testo. altrimenti testo può essere omesso: in tale caso il risultato sarà vuoto se l'espressione è falsa.
Esempio:
{{Template|parametro=qualcosa}} {{Template}} {{Template|parametro=}} | | | | | | | | | {{ #if: {{{parametro|}}} | Parametro è indicato. | Parametro non è indicato, o è vuoto. }}
Notare che la funzione if
non supporta il segno "=" o espressioni matematiche. {{#if: 1 = 2|sì|no}}
restituirà "sì", perché la stringa "1 = 2" non è vuota. La funzione if
è intesa come una funzione if defined
. Per confrontare delle stringhe, usa ifeq
. Per confrontare numeri, usa ifexpr
.
Per verificare che sia vera una condizione oppure un'altra si può scrivere:
{{#if: {{{A|}}}{{{B|}}} | A o B | né A né B }}
Per verificare che siano vere entrambe le condizioni si può scrivere:
{{#if: {{#if: {{{A|}}} | {{{B|}}} }} | A e B | A vuoto o B vuoto }}
Per vedere quali condizioni siano vere si può scrivere:
{{#if: {{{A|}}} | {{#if: {{{B|}}} | A e B | solo A}} | {{#if: {{{B|}}} | solo B | né A né B}} }}
ifeq
modificaLa funzione ifeq
confronta due stringhe, e restituisce un'altra stringa che dipende dal risultato del confronto. Sintassi:
{{ #ifeq: <testo 1> | <testo 2> | <se sono uguali restituisce questo> | <altrimenti questo> }}
iferror
modificaLa funzione iferror
prende in ingresso una stringa e restituisce un'altra stringa delle due possibili; l'uscita dipende dalla stringa in ingresso, se questa contiene un oggetto HTML con class="error"
(che può essere generato da altre funzioni parser come #expr
e #time
oppure da template) viene restituita la prima, altrimenti la seconda.
{{ #iferror <stringa> | <se la stringa restituisce un errore> | <se la stringa è corretta> }}
Una o entrambe le stringhe in uscita possono essere messe. Se viene omessa la stringa da scrivere in caso la stringa in ingresso sia esatta allora viene restituito il valore della stringa in ingresso. Se viene omessa la stringa da scrivere in caso la stringa in ingresso sia errata allora in uscita viene restituita una stringa vuota:
{{#iferror: {{#expr: 1 + 2 }} | errore | corretta }}
→ corretta{{#iferror: {{#expr: 1 + X }} | errore | corretta }}
→ errore{{#iferror: {{#expr: 1 + 2 }} | errore }}
→ 3{{#iferror: {{#expr: 1 + X }} | errore }}
→ errore{{#iferror: {{#expr: 1 + 2 }} }}
→ 3{{#iferror: {{#expr: 1 + X }} }}
→ {{#iferror: <strong class="error">a</strong> | errore | corretta }}
→ errore
ifexpr
modificaLa funzione ifexpr
risolve un'espressione matematica e restituisce un testo sulla base del risultato.
{{ #ifexpr: <espressione> | <allora testo> | <altrimenti testo> }}
Se l'espressione venisse soddisfatta, viene restituito allora testo, in caso contrario viene restituito altrimenti testo. La sintassi delle espressioni è la stessa di expr
.
ifexist
modificaifexist
restituisce uno dei due risultati, basandosi sull'esistenza o meno di una data pagina su it.wiki.
Il primo parametro è il titolo da cercare, il secondo è il risultato da restituire se la pagina esiste e il terzo è il risultato da restituire se la pagina non esiste. Se il primo parametro non è un titolo valido, la funzione restituisce il risultato negativo.
{{#ifexist:Biologia|La voce [[biologia]] esiste!|La voce [[biologia]] non esiste.}}
- restituisce "La voce biologia esiste!" perché biologia esiste.
{{#ifexist:Aiuto:Funzioni parser|Sì|No}}
- restituisce "Sì".
{{#ifexist:m:Help:Calculation|Sì|No}}
- restituisce "No", malgrado l'esistenza di m:Help:Calculation, a causa del prefisso interwiki.
N.B.: ifexist è una funzione onerosa
Esistenza dei file
modificaifexist
consente anche di testare la disponibilità di un file, in questo caso indipendentemente dal fatto che si trovi in locale o su Commons, indicando il file con il namespace virtuale Media
Al contrario, con File
, Immagine
o Image
si testa l'esistenza in locale della pagina di descrizione del file.
Così:
{{#ifexist: Media:Example.png | il file esiste su Commons o in locale | il file non esiste né su Commons né in locale }}
- restituisce "il file esiste su Commons o in locale"
Invece:
{{#ifexist: File:Example.png | esiste una pagina locale | non esiste una pagina locale }}
- restituisce "non esiste una pagina locale"
switch
modificaLa funzione switch
confronta una stringa con altre, restituendo una data stringa se trova una corrispondenza. Sintassi:
{{ #switch: <valore di confronto> | <valore1>=<risultato1> | <valore2>=<risultato2> | ... | <valoren>=<risultaton> | #default=<risultato di default> }}
switch
cercherà tra tutti i valori dati finché non trova una corrispondenza. Quando la corrispondenza viene trovata, viene restituito il risultato assegnato a tale valore (il testo dopo il segno di uguale). Se non viene trovata alcuna corrispondenza, ma l'ultimo elemento non ha il segno di uguale, verrà restituito come valore di default.
È anche possibile assegnare un risultato a più valori, evitando di duplicare testo. Per esempio:
{{ #switch: <valore di confronto> | <valore1> | <valore2> | <valore3>=<risultato3> | ... | <valoren>=<risultaton> | #default=<risultato di default> }}
Nota che valore1 e valore2 non contengono il simbolo uguale. Se si trovasse una corrispondenza con essi, verrebbe restituito il risultato assegnato a valore3 (risultato3).
Formattazione
modificaMaiuscole e minuscole
modificariassunto veloce:
- Prima maiuscola:
{{ucfirst:}}
-Funzioni parser
- prima minuscola:
{{lcfirst:}}
-funzioni parser
- TUTTO MAIUSCOLO:
{{uc:}}
-FUNZIONI PARSER
- tutto minuscolo:
{{lc:}}
-funzioni parser
lc
modificaAcronimo di lower case (tutto minuscolo): trasforma un testo in caratteri minuscoli.
Con {{lc:AbCdEf}}
si ottiene abcdef.
Con {{lc:Ä Β Ç}}
si ottiene ä β ç, atteso ä β ç.
uc
modificaAcronimo di upper case (tutto maiuscolo): trasforma un testo in caratteri maiuscoli.
Con {{uc:AbCdEf}}
si ottiene ABCDEF.
Con {{uc:ä β ß}}
si ottiene Ä Β SS.
lcfirst
modificaAcronimo di lower case first (prima minuscola): trasforma in minuscolo il primo carattere di un testo: con {{lcfirst:Ab Cd}}
si ottiene ab Cd.
ucfirst
modificaAcronimo di upper case first (prima maiuscola): trasforma in maiuscolo il primo carattere di un testo: con {{ucfirst:aB cD}}
si ottiene AB cD.
formatnum
modificaAggiunge la virgola dei decimali e i separatori delle migliaia a un numero puro.
I separatori delle migliaia vengono inseriti solo nella parte intera (prima della virgola), non nella parte frazionaria (dopo la virgola).
Il numero dato in input deve essere inserito in notazione informatica, senza separatori di migliaia e con il punto come separatore decimale, ad es. 12345.67
, come quelli dati in input e restituiti in output da #expr.
Con {{formatnum:1234.56}}
si ottiene 1 234,56
Con {{formatnum:1234567.8901234}}
si ottiene 1 234 567,8901234
L'eventuale presenza di note insieme al numero non dà problemi, vengono ignorate e restituite così come sono.
Anche i caratteri non numerici, esclusi i separatori, vengono ignorati e mantenuti.
Con {{formatnum:''I numeri sono 1234 e 5678<ref>Prova.</ref>''}}
si ottiene I numeri sono 1 234 e 5 678[1]
È possibile fare l'operazione contraria aggiungendo R come secondo parametro: con {{formatnum:1 234 567,89|R}}
si ottiene 1 234 567.89 (gli spazi non sono spazi normali ma caratteri di spazio unificatore).
padleft e padright
modificaAggiunge dei caratteri di riempimento sulla sinistra, rendendo la stringa di lunghezza fissa. Sintassi:
{{padleft: stringa | lunghezza | riempimento}}
Con {{padleft:ciao|10|+-}}
si ottiene +-+-+-ciao
padright
ha lo stesso effetto ma riempie il lato destro. Esempio: {{padright:ciao|10|+-}}
genera: ciao+-+-+-
padleft
o padright
può essere sfruttato per ottenere i primi N caratteri di una stringa di lunghezza ≥ N: con {{padleft:|3|Tizio}}
si ottiene Tiz
plural
modificaMostra una stringa diversa a seconda se l'argomento è "1" o un numero maggiore.
{{plural: N | singolare | plurale }}
Con {{plural:3|casa|case}}
si ottiene case
Il default con parametro vuoto o non riconosciuto è "plurale". "1" seguito da altre parole e "-1" sono riconosciuti come singolare.
time
modificaLa funzione time
è un costrutto per la formattazione del tempo. Sintassi:
{{ #time: formato }}
o
{{ #time: formato | time }}
Se non è specificato un valore per time viene usata la data e ora della conversione in HTML della pagina (nel tempo coordinato universale). Attenzione che a causa del meccanismo di caching questo valore può differire notevolmente dal momento in cui la pagina viene visualizzata. Per aggiornare il valore è necessario salvare la pagina (senza averla modificata, ovvero facendo un "edit nullo"), o visualizzarla richiedendo la ripulitura della cache (&action=purge
aggiunto all'url) oppure selezionare l'opzione che disabilita il caching delle pagine nelle proprie preferenze.
La funzione #timel
è analoga a #time
, ma utilizza il fuso orario locale di it.wiki (Europe/Rome, UTC+1/2) anziché il tempo coordinato universale.
Parametro formato
modificaIl parametro formato è una stringa che utilizza una sintassi simile a quella usata nelle date in PHP[2].
formato veloce
{{#timel:j F Y}}
→29 ottobre 2024
{{#timel:Y-m-d}}
→2024-10-29
{{#timel:l j F Y G:i}}
→martedì 29 ottobre 2024 18:29
{{#timel:D j M Y h:i a}}
→mar 29 ott 2024 06:29 pm
{{#timel:Y-m-d H:i}}
→2024-10-29 18:29
Parametro | Descrizione | output equivalente con | Variabili equivalenti | ||
---|---|---|---|---|---|
#time | #timel | Orario UTC | Orario locale | ||
Anno | |||||
Y | in 4 cifre | 2024 | 2024 | {{CURRENTYEAR}} | {{LOCALYEAR}} |
y | in 2 cifre | 24 | 24 | - | - |
L | 1 se bisestile, 0 altrimenti | 1 | 1 | - | - |
Mese | |||||
F | Nome completo | ottobre | ottobre | {{CURRENTMONTHNAME}} | {{LOCALMONTHNAME}} |
M | Nome abbreviato | ott | ott | {{CURRENTMONTHABBREV}} | {{LOCALMONTHABBREV}} |
m | Numero del mese (01 - 12) | 10 | 10 | {{CURRENTMONTH}} | {{LOCALMONTH}} |
n | Numero del mese (1 - 12) | 10 | 10 | ||
t | Numero di giorni del mese | 31 | 31 | ||
Giorno | |||||
d | Giorno del mese (01 - 31). |
29 | 29 | {{CURRENTDAY2}} | {{LOCALDAY2}} |
j | Giorno del mese (1 - 31). | 29 | 29 | {{CURRENTDAY}} | {{LOCALDAY}} |
z | Giorno dell'anno (0 - 364[3]) | 302 | 302 | ||
l | Nome completo | martedì | martedì | {{CURRENTDAYNAME}} | {{LOCALDAYNAME}} |
D | Nome abbreviato | mar | mar | ||
N | Giorno della settimana ISO 8601 (1 (Lunedì) - 7 (Domenica)) |
2 | 2 | {{CURRENTWEEK}} | {{LOCALWEEK}} |
w | Giorno della settimana (0 (Domenica) - 6 (Sabato)) |
2 | 2 | ||
Settimane | |||||
W | Settimana dell'anno (01 - 52) |
44 | 44 | {{CURRENTWEEK}} | {{LOCALWEEK}} |
Orario | |||||
H:i | Ora:minuti (00:00 - 23:59) | 17:29 | 18:29 | {{CURRENTTIME}} | {{LOCALTIME}} |
H | Ora formato 24 ore (00 - 23) | 17 | 18 | {{CURRENTHOUR}} | {{LOCALHOUR}} |
G | Ora formato 24 ore (0 - 23) | 17 | 18 | ||
h | Ora formato 12 ore (01 - 12) | 05 | 06 | ||
g | Ora formato 12 ore (1 - 12) | 5 | 6 | ||
a | am o pm | pm | pm | ||
A | AM o PM | PM | PM | ||
i | Il minuto (00 - 59) | 29 | 29 | ||
s | Il secondo (00 - 59) | 53 | 53 |
I caratteri non riconosciuti vengono lasciati inalterati. Esistono due tecniche per evitare l'elaborazione di caratteri inseriti in stringhe di descrizione:
- racchiudere gli stessi fra doppi apici (i singoli apici non verranno considerati)
- Corretto:
{{#time: "Attualmente è" F}}
→ Attualmente è ottobre - Errato:
{{#time: Attualmente è F}}
→ PM3131upmmartedì10UTC1031UTC è ottobre - Singoli apici:
{{#time:G:i's"}}
→ 17:29'53"
- Corretto:
- Utilizzare il carattere di escape
\
:{{#time:\H}}
→ H{{#time:\"}}
→ "
Parametro time
modificaIl formato del parametro time è identico a quello usato dalla funzione PHP strtotime(). Supporta date sia assolute sia relative. Le date devono essere espresse in formato inglese ovvero "December 11" e non "11 Dicembre" e "+10 hours" e non "+10 ore". Questa caratteristica può essere usata per la gestione delle "timezone" ovvero per la conversione dall'orario UTC usato per default all'orario CET o CEST usato in Italia. Per ulteriori informazioni vedere the GNU tar manual.
Esempi
modifica{{#time:G:i's"|+1 hours}}
→ 18:29'53" restituisce l'ora CET (ora solare){{#time:G:i's"|+2 hours}}
→ 19:29'53" restituisce l'ora CEST (ora legale){{#time:j F Y|-14 days}}
restituisce 15 ottobre 2024 (14 giorni fa){{#time:H:i|+6 hours}}
restituisce 23:29 (6 ore più UTC){{#time:H:i|8:15 +6 hours}}
restituisce 14:15{{#time:m/Y|-1 months}}
restituisce 09/2024 (1 mese fa){{#time:d/m|25 dicembre}}
restituisce Errore: orario non valido. (25 dicembre){{#time:d/m|December 25}}
restituisce 25/12 (25 dicembre)
"-1" e "last" sono equivalenti, così come "+1" e "next".
Intervallo di validità
modificaL'intervallo di date che vengono correttamente gestite da questa funzione va dal 1970-1-1 00:00:01 fino al 2038-1-19 03:14:07 (da 1 a 231 secondi dall'inizio del 1970).
Percorsi
modificaurlencode
modificaConverte il testo in formato compatibile con URL sostituendo gli spazi con "+" e gli altri caratteri di formattazione url coi loro equivalenti: con {{urlencode:hello world ?&=#/:}}
si ottiene hello+world+%3F%26%3D%23%2F%3A.
rel2abs
modificaConverte un percorso, sia esso un URL o il titolo di una sottopagina di Wikipedia, da relativo a assoluto. Sintassi:
{{#rel2abs: percorso relativo | percorso base }}
Il primo parametro, come nei percorsi delle cartelle di Windows/Unix, può contenere una combinazione di:
.
(percorso attuale)..
(livello superiore)/nome
(nome sottopagina)
Il secondo parametro, se omesso, è il titolo della pagina attuale.
Con {{#rel2abs: ../cccc | aaaaa/bbb }}
si ottiene aaaaa/cccc
titleparts
modificaEstrae da un percorso, sia esso un URL o il titolo di una sottopagina di Wikipedia, le componenti di diverso livello separate da "/". Sintassi:
{{#titleparts: percorso | numero parti | parte iniziale }}
Il default è "tutte" per il numero parti e 1 per la parte iniziale. Numeri negativi permettono di contare partendo dal fondo (destra).
Con {{#titleparts: aaaa/bbb/cc/ddd/ee | 3 | 2 }}
si ottiene bbb/cc/ddd
Con {{#titleparts: https://wikipedia.org/yyy/zz | 3 | 1 }}
si ottiene Https://wikipedia.org (le // contano come due livelli)
Supporta un massimo di 25 livelli e 255 caratteri e non funziona con alcuni caratteri. Si consiglia di usarlo solo con i percorsi e non per altri "trucchi".
tag
modificaLa funzione tag
genera un tag XML specifico del wikicodice, come <ref> o <gallery>, compreso il tag di chiusura. Sintassi:
{{#tag: <nome tag> | <contenuto> | <attributo1>=<valore1> | <attributo2>=<valore2> ... }}
Esempio:
{{#tag:ref|Contenuto|name=Nome}}
È equivalente a <ref name="Nome">Contenuto</ref>
e restituisce: [4]
La funzione è utile in particolare quando un template deve generare un tag che contiene a sua volta wikicodice complesso, perché assicura che il tag sia processato dopo il suo contenuto (altrimenti il contenuto potrebbe non funzionare). Assicura anche che eventuali tag presenti nel codice non eseguito (ad esempio la parte negata di un #if) non vengano erroneamente processati.
Altro
modifica- invoke
- vedi Aiuto:Moduli
- property
- vedi Aiuto:Wikidata
- gender
- Funzione usata in genere nei template di avviso per utenti. Dato un nome utente, restituisce una stringa diversa a seconda del sesso dell'utente, se specificato nelle sue preferenze. Sintassi
{{gender: nome | maschio | femmina | sconosciuto }}
Se non si specifica un testo per "sconosciuto", il default è maschio. Se il nome è vuoto usa l'utente corrente.
Funzioni onerose
modificaAlcune funzioni e variabili sono onerose (expensive), ovvero il loro calcolo richiede una "fatica" relativamente alta per il sistema. Si tratta in genere delle funzioni e variabili che richiedono informazioni su un'altra pagina, ad esempio ifexist. C'è anche un limite nel numero di queste funzioni che può essere richiamato da una pagina; se lo si supera, le chiamate non funzionano più e la pagina viene inserita in Categoria:Pagine con troppe chiamate alle funzioni parser.
Si prega perciò di non esagerare nell'uso di queste funzioni, specialmente nei template che vengono inclusi molte volte nella stessa pagina. In genere anche le corrispondenti funzioni disponibili in Lua sono ugualmente onerose, i moduli quindi non risolvono il problema.
Note
modifica- ^ Prova.
- ^ https://www.php.net/manual/en/datetime.format.php
- ^ 0 - 365 per gli anni bisestili
- ^ Contenuto
Pagine correlate
modificaAltri progetti
modificaPer informazioni tecniche complete e aggiornate:
- Wikisource contiene una pagina sulle funzioni parser
- Wikiquote contiene citazioni sulle funzioni parser
- Wikibooks contiene testi o manuali sulle funzioni parser
- Wikiversità contiene risorse sulle funzioni parser
- Mediawiki contiene informazioni sulle funzioni parser