Aiuto:ParserFunctions

Aiuto: ParserFunctions

Categoria: Guida del wikisourciano espertoManuale   Guida del wikisourciano esperto   Parole magiche   ParserFunctions 

Questa estensione MediaWiki è una raccolta di funzioni parser. Sintassi:

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

Questa estensione supporta le funzioni: expr, if, ifeq, ifexpr e switch.

La funzione expr elabora operazioni matematiche. Gli operatori supportati (in ordine di precedenza) sono:

Operatore Operazione Esempio
* Moltiplicazione {{#expr: 30 * 7}} = 210
/ or div Divisione {{#expr: 30 / 7}} = 4.2857142857143
+ Addizione {{#expr: 30 + 7}} = 37
- Sottrazione (o negazione) {{#expr: 30 - 7}} = 23
mod Modulo, restituisce il resto di una divisione {{#expr: 30 mod 7}} = 2
round Arrotonda il numero a sinistra con il numero
di cifre decimali indicato dal numero a destra
{{#expr: 30 / 7 round 6}} = 4.285714
= Uguaglianza {{#expr: 30 = 7}} = 0
<> or != 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
not NOT logico {{#expr: not 7}} = 0
( ) Parentesi {{#expr: (30 + 7) * 7 }} = 259

Gli operatori booleani considerano 0 come falso e 1 come vero.

Esempio:

{{ #expr: (100 - 32) / 9 * 5 round 0 }} restituisce: 38

che è 100°F in °C, arrotondato al numero intero più vicino.

La 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 bianco, allora è considerata falsa, e viene restituito altrimenti testo. Altrimenti, 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.

La funzione ifeq confronta due stringhe, e ritorna un'altra stringa che dipende dal risultato del confronto. Sintassi:

{{ #ifeq: <testo 1> | <testo 2> | <se sono uguali restituisce questo> | <altrimenti questo> }}

La funzione ifexpr risolve un'espressione matematica e restituisce un testo sulla base del risultato.

{{ #ifexpr: <espressione> | <allora testo> | <altrimenti testo> }}

Se l'espressione risulta 0, allora viene restituito altrimenti testo, in caso contrario viene restituito allora testo. La sintassi delle espressioni è la stessa di expr.

ifexist

modifica

ifexist restituisce uno dei due risultati, basandosi sull'esistenza o meno di una data pagina.

{{#ifexist:Biologia|La voce [[biologia]] esiste!|La voce [[biologia]] non esiste.}} restituisce La voce biologia non esiste. perché biologia non esiste.
{{#ifexist:Aiuto:ParserFunctions|Sì|No}} restituisce .
{{#ifexist:m:Help:Calculation|Sì|Oops}} restituisce Oops sebbene m:Help:Calculation esista, a causa del prefisso di interwiki.

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.

iferror

modifica

Questa funzione accetta una stringa e restituisce uno di due valori; il primo se la stringa di input genera oggetto HTML di classe class="error", come quelli generati da altre funzioni del parser come #expr, #time e #rel2abs, gli errori all'interno di template come cicli senza fine , e altri errori del server.

{{#iferror: stringa test | valore se errata | valore se corretta }}

Possono essere omesse una o entrambe le stringhe di output. Se la stringa corretto sè omessa, viene restituita la stringa test se è corretta. Se viene omesso anche il valore in caso di errore in caso di errore viene restituita una stringa vuota:

{{#iferror: {{#expr: 1 + 2 }} | errore | OK }}OK
{{#iferror: {{#expr: 1 + X }} | errore | OK }}errore
{{#iferror: {{#expr: 1 + 2 }} | errore }}3
{{#iferror: {{#expr: 1 + X }} | errore }}errore
{{#iferror: {{#expr: 1 + 2 }} }} 3
{{#iferror: {{#expr: 1 + X }} }}

rel2abs

modifica

Questa funzione converte un indirizzo di file relativo in un indirizzo assoluto.

{{#rel2abs: indirizzo relativo }}
{{#rel2abs: indirizzo relativo | indirizzo di base }}

All'interno del valore di input indirizzo relativo, è valida la seguente sintassi:

  • . → il livello corrente
  • .. → "sali di un livello"
  • /foo → "scendi di un livello nella directory /foo"

Se non viene specificato l'indirizzo di base verrà utilizzato il nome completo della pagina corrente:

{{#rel2abs: /quok | Aiuto:Foo/bar/baz }}Aiuto:Foo/bar/baz/quok
{{#rel2abs: ./quok | Aiuto:Foo/bar/baz }}Aiuto:Foo/bar/baz/quok
{{#rel2abs: ../quok | Aiuto:Foo/bar/baz }}Aiuto:Foo/bar/quok
{{#rel2abs: ../. | Aiuto:Foo/bar/baz }}Aiuto:Foo/bar

Le sintassi non valide, come /. o /./, sono ignorate. Poichè non sono consentiti più di due punti consecutivi, sequenze come le seguenti possono essere usate per separare istruzioni successive:

{{#rel2abs: ../quok/. | Aiuto:Foo/bar/baz }}Aiuto:Foo/bar/quok
{{#rel2abs: ../../quok | Aiuto:Foo/bar/baz }}Aiuto:Foo/quok
{{#rel2abs: ../../../quok | Aiuto:Foo/bar/baz }}quok
{{#rel2abs: ../../../../quok | Aiuto:Foo/bar/baz }}Errore: profondità non valida nel percorso "Aiuto:Foo/bar/baz/../../../../quok" (si è tentato di accedere a un nodo superiore alla radice).

La 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> 
 | <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, e l'ultimo elemento non contiene alcun segno di uguale, verrà restituito come valore di default.

In alternativa, per evitare un errore logico nella restituzione del valore di default quando questo contiene un segno uguale all'interno del valore da restituire, è possibile indivare il valore di default in modo esplicito con #default=, che può inoltre essere inserito in qualsiasi posizione nella lista dei valori (ossia non deve necessariamente essere l'ultimo della lista):

 {{ #switch: <valore di confronto>
 | #default=<risultato di default>
 | <valore1>=<risultato1>
 | <valore2>=<risultato2>
 | ...
 | <valoren>=<risultaton> 
 }}


È anche possibile assegnare un risultato a più valori, evitando di duplicare testo. Per esempio:

 {{ #switch: <valore di confronto>
 | <valore1>
 | <valore2>
 | <valore3>=<risultato3>
 | ...
 | <valoren>=<risultaton> 
 | <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).

Nelle espressioni è consentito usare il punto decimale, e i numeri non interi restituiti dalle espressioni hanno un punto decimale. Le virgole non sono né accettate in input, né prodotte in output. Questo è valido anche se la variabile {{NUMBEROFARTICLES}} usa la virgola per le migliaia, e in alcune versioni locali di MediaWiki il punto.

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

Parametro formato

modifica

Il parametro formato è una stringa che utilizza una sintassi simile a quella usata nelle date in PHP [1].

Parametro Descrizione Esempio
d Il giorno del mese, con lo zero davanti. 15
D Abbrevazione del mese della settimana ven
j Il giorno del mese, senza lo zero davanti. 15
l Il giorno della settimana venerdì
N Il giorno settimanale nel formato ISO 8601 (1 (per Lunedì) - 7 (per Domenica)) 5
w Il giorno settimanale (0 (per Domenica) - 6 (per Sabato)) 5
z Il giorno annuale (Partendo da 0 fino a 365) 319
W Numero della settimana in formato ISO 8601 46
F Il nome completo del mese novembre
m Il numero del mese, con lo zero davanti. 11
M Abbrevazione del mese nov
n Il numero del mese, senza lo zero davanti. 11
t Numero di giorni del mese 30
L 1 se l'anno è bisestile, 0 altrimenti 1
Y Anno in 4 cifre 2024
y Anno in 2 cifre 24
a am o pm pm
A AM o PM PM
g L'ora in formato 12 ore, senza lo zero davanti (1 - 12) 2
G L'ora in formato 24 ore, senza lo zero davanti (0 - 23) 14
h L'ora in formato 12 ore, con lo zero davanti (01 - 12) 02
H L'ora in formato 24 ore, con lo zero davanti (00 - 23) 14
i Il minuto (00 - 59) 05
s Il secondo (00 - 59) 02
c La data in formato ISO 8601 2024-11-15T14:05:02+00:00
r La data in formato RFC 2822 Fri, 15 Nov 2024 14:05:02 +0000
U Secondi dal Gennaio 1 1970 00:00:00 GMT 1731679502

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 è novembre
    • Errato: {{ #time: Attualmente è F}} → PM3030upmvenerdì11UTC1130UTC è novembre
    • Singoli apici: {{ #time:G:i's"}} → 14:05'02"
  • Utilizzare il carattere di escape "\".
    • {{ #time:\H}} → H
    • {{ #time:\"}} → "


Parametro time

modifica

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

  • {{#time:G:i's"|+1 hours}} → 15:05'03" torna l'ora CET (ora solare)
  • {{#time:G:i's"|+2 hours}} → 16:05'03" torna l'ora CEST (ora legale)
  • {{#time:j F Y|-14 days}} ritorna 1 novembre 2024 (14 giorni fa)
  • {{#time:H:i|+6 hours}} ritorna 20:05 (6 ore più UTC)
  • {{#time:H:i|8:15 +6 hours}} ritorna 14:15
  • {{#time:m/Y|-1 months}} ritorna 10/2024 (1 mese fa)
  • {{#time:m/Y|11 Dicembre}} ritorna Errore: orario non valido. (11 Dicembre)
  • {{#time:m/Y|December 11}} ritorna 12/2024 (11 Dicembre)

Intervallo di validità

modifica

L'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   secondi dall'inizio del 1970). Vedi anche Problema dell'anno 2038.

titleparts

modifica

Questa funzione separa in segmenti un titolo di pagina basandosi sui caratteri slash (/), poi restituisce come output alcuni di questi segmenti. La funzione opera su qualsiasi stringa contenente caratteri slash al suo interno.

{{#titleparts: titolo della pagina | numero dei segmenti da restituire | primo segmento da restituire }}

Se il parametro primo segmento da restituire non è specificato, il suo valore di debault è 1. Se il parametro numero di segmenti da restituire non è specificato, il suo default è "0", che restituisce tutti i segmenti:

{{#titleparts: Il cavallarizzo/Libro 2/Capitolo 3 }}Il cavallarizzo/Libro 2/Capitolo 3
{{#titleparts: Il cavallarizzo/Libro 2/Capitolo 3 | 1 }}Il cavallarizzo
{{#titleparts: Il cavallarizzo/Libro 2/Capitolo 3 | 2 }}Il cavallarizzo/Libro 2
{{#titleparts: Il cavallarizzo/Libro 2/Capitolo 3 | 2 | 2 }}Libro 2/Capitolo 3

Sono accettati valori negativi per il parametro numero di segmenti da restituire; vengono tradotti in "aggiungi questo valore al numero totale dei segmenti", approssimativamente corrispondente a "conta dalla destra":

{{#titleparts: uno/due/tre/quattro/cinque/sei | -1 }}Uno/due/tre/quattro/cinque
{{#titleparts: uno/due/tre/quattro/cinque/sei | -2 | 2}} due/tre/quattro

Vedi anche

modifica

Collegamenti esterni

modifica