Filtri per latte
I filtri sono funzioni che modificano o formattano i dati nella forma desiderata. Questo è un riassunto dei filtri incorporati disponibili.
capitalize |
minuscolo, la prima lettera di ogni parola maiuscola |
firstUpper |
rende la prima lettera maiuscola |
lower |
rende una stringa minuscola |
upper |
rende una stringa maiuscola |
ceil |
arrotonda un numero fino a una determinata precisione |
floor |
arrotonda un numero per difetto a una determinata precisione |
round |
arrotonda un numero a una determinata precisione |
escapeUrl |
esegue l'escape di un parametro nell'URL |
noescape |
stampa una variabile senza escape |
query |
genera una stringa di query nell'URL |
Esistono anche filtri di escape per HTML (escapeHtml
e escapeHtmlComment
), XML
(escapeXml
), JavaScript (escapeJs
), CSS (escapeCss
) e iCalendar (escapeICal
),
che Latte utilizza autonomamente grazie all'escape context-aware e che
non è necessario scrivere.
checkUrl |
sanifica le stringhe da usare nell'attributo href |
nocheck |
impedisce la sanitizzazione automatica degli URL |
I controlli degli attributi src
e href
vengono
eseguiti automaticamente, quindi non è necessario usare il filtro
checkUrl
.
Tutti i filtri incorporati funzionano con stringhe codificate UTF-8.
Uso
Latte consente di chiamare i filtri usando la notazione del segno di pipe (è ammesso lo spazio precedente):
<h1>{$heading|upper}</h1>
I filtri possono essere concatenati, in tal caso si applicano in ordine da sinistra a destra:
<h1>{$heading|lower|capitalize}</h1>
I parametri vengono inseriti dopo il nome del filtro, separati da due punti o da una virgola:
<h1>{$heading|truncate:20,''}</h1>
I filtri possono essere applicati alle espressioni:
{var $name = ($title|upper) . ($subtitle|lower)}</h1>
I filtri personalizzati possono essere registrati in questo modo:
$latte = new Latte\Engine;
$latte->addFilter('shortify', fn(string $s, int $len = 10) => mb_substr($s, 0, $len));
Lo utilizziamo in un modello come questo:
<p>{$text|shortify}</p>
<p>{$text|shortify:100}</p>
Filtri
batch (int length, mixed item): array
Filtro che semplifica l'elencazione di dati lineari sotto forma di tabella. Restituisce un array di array con il numero di elementi indicato. Se si fornisce un secondo parametro, questo viene utilizzato per riempire gli elementi mancanti nell'ultima riga.
{var $items = ['a', 'b', 'c', 'd', 'e']}
<table>
{foreach ($items|batch: 3, 'No item') as $row}
<tr>
{foreach $row as $column}
<td>{$column}</td>
{/foreach}
</tr>
{/foreach}
</table>
Stampa:
<table>
<tr>
<td>a</td>
<td>b</td>
<td>c</td>
</tr>
<tr>
<td>d</td>
<td>e</td>
<td>No item</td>
</tr>
</table>
breakLines
Inserisce le interruzioni di riga HTML prima di tutti i newline.
{var $s = "Text & with \n newline"}
{$s|breakLines} {* uscite "Text & with <br>\n newline" *}
bytes (int precision = 2)
Formatta una dimensione in byte in forma leggibile.
{$size|bytes} 0 B, 1.25 GB, …
{$size|bytes:0} 10 B, 1 GB, …
ceil (int precision = 0)
Arrotonda un numero fino a una determinata precisione.
{=3.4|ceil} {* uscite 4 *}
{=135.22|ceil:1} {* uscite 135.3 *}
{=135.22|ceil:3} {* uscite 135.22 *}
capitalize
Restituisce una versione con titolo del valore. Le parole inizieranno con lettere maiuscole, tutti i caratteri rimanenti
saranno minuscoli. Richiede l'estensione PHP mbstring
.
{='i like LATTE'|capitalize} {* uscite 'I Like Latte' *}
Vedere anche firstUpper, lower, upper.
checkUrl
Impone la sanitizzazione degli URL. Controlla se la variabile contiene un URL web (cioè un protocollo HTTP/HTTPS) e impedisce la scrittura di link che potrebbero rappresentare un rischio per la sicurezza.
{var $link = 'javascript:window.close()'}
<a data-href="{$link|checkUrl}">checked</a>
<a data-href="{$link}">unchecked</a>
Stampa:
<a data-href="">checked</a>
<a data-href="javascript:window.close()">unchecked</a>
Vedere anche nocheck.
clamp (int|float min, int|float max)
Restituisce un valore limitato all'intervallo inclusivo di min e max.
{$level|clamp: 0, 255}
Esiste anche come funzione.
dataStream (string mimetype = detect)
Converte il contenuto in uno schema URI di dati. Può essere usato per inserire immagini in HTML o CSS senza la necessità di collegare file esterni.
Poniamo di avere un'immagine in una variabile $img = Image::fromFile('obrazek.gif')
, allora
<img src="{$img|dataStream}">
Stampa ad esempio:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==">
Richiede l'estensione PHP fileinfo
.
date (string format)
Restituisce una data nel formato indicato, utilizzando le opzioni delle funzioni PHP strftime o date. Il filtro ottiene una data come timestamp
UNIX, una stringa o un oggetto di tipo DateTime
.
{$today|date:'%d.%m.%Y'}
{$today|date:'j. n. Y'}
escapeUrl
Permette di separare una variabile da usare come parametro nell'URL.
<a href="http://example.com/{$name|escapeUrl}">{$name}</a>
Vedere anche query.
explode (string separator =
''
)
Divide una stringa in base al delimitatore dato e restituisce un array di stringhe. Alias di split
.
{='one,two,three'|explode:','} {* returns ['one', 'two', 'three'] *}
Se il delimitatore è una stringa vuota (valore predefinito), l'input verrà diviso in singoli caratteri:
{='123'|explode} {* returns ['1', '2', '3'] *}
È possibile utilizzare anche l'alias split
:
{='1,2,3'|split:','} {* returns ['1', '2', '3'] *}
Vedere anche implode.
first
Restituisce il primo elemento di una matrice o un carattere di una stringa:
{=[1, 2, 3, 4]|first} {* uscite 1 *}
{='abcd'|first} {* uscite 'a' *}
floor (int precision = 0)
Arrotonda un numero fino a una determinata precisione.
{=3.5|floor} {* uscite 3 *}
{=135.79|floor:1} {* uscite 135.7 *}
{=135.79|floor:3} {* uscite 135.79 *}
firstUpper
Converte la prima lettera di un valore in maiuscolo. Richiede l'estensione PHP mbstring
.
{='the latte'|firstUpper} {* uscite 'The latte' *}
Vedere anche capitalize, lower, upper.
implode (string glue = ''
)
Restituisce una stringa che è la concatenazione delle stringhe dell'array. Alias di join
.
{=[1, 2, 3]|implode} {* uscite '123' *}
{=[1, 2, 3]|implode:'|'} {* uscite '1|2|3' *}
È possibile utilizzare anche l'alias join
:
{=[1, 2, 3]|join} {* uscite '123' *}
indent (int level = 1, string char =
"\t"
)
Rientra un testo da sinistra di un determinato numero di tabulazioni o di altri caratteri, specificati nel secondo argomento opzionale. Le righe vuote non sono rientrate.
<div>
{block |indent}
<p>Hello</p>
{/block}
</div>
Stampa:
<div>
<p>Hello</p>
</div>
last
Restituisce l'ultimo elemento della matrice o il carattere della stringa:
{=[1, 2, 3, 4]|last} {* uscite 4 *}
{='abcd'|last} {* uscite 'd' *}
length
Restituisce la lunghezza di una stringa o di un array.
- per le stringhe, restituisce la lunghezza in caratteri UTF-8
- per gli array, restituisce il conteggio degli elementi
- per gli oggetti che implementano l'interfaccia Countable, utilizzerà il valore di ritorno del metodo count()
- per gli oggetti che implementano l'interfaccia IteratorAggregate, utilizzerà il valore di ritorno dell'iterator_count()
{if ($users|length) > 10}
...
{/if}
lower
Converte un valore in minuscolo. Richiede l'estensione PHP mbstring
.
{='LATTE'|lower} {* uscite 'latte' *}
Vedere anche capitalize, firstUpper, upper.
nocheck
Impedisce la sanificazione automatica degli URL. Latte controlla automaticamente se la variabile contiene un URL web (cioè un protocollo HTTP/HTTPS) e impedisce la scrittura di link che potrebbero rappresentare un rischio per la sicurezza.
Se il link utilizza uno schema diverso, come javascript:
o data:
, e si è sicuri del suo contenuto,
si può disabilitare il controllo tramite |nocheck
.
{var $link = 'javascript:window.close()'}
<a href="{$link}">checked</a>
<a href="{$link|nocheck}">unchecked</a>
Stampe:
<a href="">checked</a>
<a href="javascript:window.close()">unchecked</a>
Vedere anche checkUrl.
noescape
Disabilita l'escape automatico.
{var $trustedHtmlString = '<b>hello</b>'}
Escaped: {$trustedHtmlString}
Unescaped: {$trustedHtmlString|noescape}
Stampa:
Escaped: <b>hello</b>
Unescaped: <b>hello</b>
L'uso improprio del filtro noescape
può portare a una vulnerabilità XSS! Non utilizzatelo mai a
meno che non siate assolutamente sicuri di quello che state facendo e che la stringa che state stampando provenga da una
fonte affidabile.
number (int decimals = 0, string decPoint =
'.'
, string thousandsSep = ','
)
Formatta un numero con un determinato numero di cifre decimali. È anche possibile specificare un carattere del punto decimale e del separatore delle migliaia.
{1234.20 |number} 1,234
{1234.20 |number:1} 1,234.2
{1234.20 |number:2} 1,234.20
{1234.20 |number:2, ',', ' '} 1 234,20
padLeft (int length, string pad =
' '
)
Imbottisce una stringa di una certa lunghezza con un'altra stringa a partire da sinistra.
{='hello'|padLeft: 10, '123'} {* uscite '12312hello' *}
padRight (int length, string pad =
' '
)
Imbottisce una stringa di una certa lunghezza con un'altra stringa proveniente da destra.
{='hello'|padRight: 10, '123'} {* uscite 'hello12312' *}
query
Genera dinamicamente una stringa di query nell'URL:
<a href="http://example.com/?{[name: 'John Doe', age: 43]|query}">click</a>
<a href="http://example.com/?search={$search|query}">search</a>
Stampa:
<a href="http://example.com/?name=John+Doe&age=43">click</a>
<a href="http://example.com/?search=Foo+Bar">search</a>
I tasti con valore null
vengono omessi.
Vedere anche escapeUrl.
random
Restituisce un elemento casuale di una matrice o un carattere di una stringa:
{=[1, 2, 3, 4]|random} {* esempio di uscita: 3 *}
{='abcd'|random} {* esempio di uscita: 'b' *}
repeat (int count)
Ripete la stringa x volte.
{='hello'|repeat: 3} {* produce 'hellohellohello' *}
replace (string|array search, string replace =
''
)
Sostituisce tutte le occorrenze della stringa di ricerca con la stringa di sostituzione.
{='hello world'|replace: 'world', 'friend'} {* outputs 'hello friend' *}
È possibile effettuare più sostituzioni contemporaneamente:
{='hello world'|replace: [h => l, l => h]} {* outputs 'lehho worhd' *}
replaceRE (string pattern, string replace =
''
)
Sostituisce tutte le occorrenze in base all'espressione regolare.
{='hello world'|replaceRE: '/l.*/', 'l'} {* outputs 'hel' *}
reverse
Inverte la stringa o l'array dato.
{var $s = 'Nette'}
{$s|reverse} {* outputs 'etteN' *}
{var $a = ['N', 'e', 't', 't', 'e']}
{$a|reverse} {* returns ['e', 't', 't', 'e', 'N'] *}
round (int precision = 0)
Arrotonda un numero a una determinata precisione.
{=3.4|round} {* uscite 3 *}
{=3.5|round} {* uscite 4 *}
{=135.79|round:1} {* uscite 135.8 *}
{=135.79|round:3} {* uscite 135.79 *}
slice (int start, int length = null, bool preserveKeys = false)
Estrae una fetta di un array o di una stringa.
{='hello'|slice: 1, 2} {* outputs 'el' *}
{=['a', 'b', 'c']|slice: 1, 2} {* outputs ['b', 'c'] *}
Il filtro slice funziona come la funzione PHP array_slice
per gli array e mb_substr
per le stringhe,
con un fallback a iconv_substr
in modalità UTF-8.
Se start è non negativo, la sequenza inizierà da quell'inizio nella variabile. Se start è negativo, la sequenza inizierà a quella distanza dalla fine della variabile.
Se la lunghezza è data ed è positiva, la sequenza conterrà fino a quel numero di elementi. Se la variabile è più corta della lunghezza, saranno presenti solo gli elementi disponibili della variabile. Se la lunghezza è data ed è negativa, la sequenza si fermerà a tanti elementi dalla fine della variabile. Se viene omesso, la sequenza conterrà tutti gli elementi dall'offset fino alla fine della variabile.
Per impostazione predefinita, Filter riordina e reimposta le chiavi dell'array di interi. Questo comportamento può essere modificato impostando preserveKeys su true. Le chiavi stringa vengono sempre conservate, indipendentemente da questo parametro.
sort
Filtro che ordina un array e mantiene l'associazione degli indici.
{foreach ($names|sort) as $name}
...
{/foreach}
Array ordinato in ordine inverso.
{foreach ($names|sort|reverse) as $name}
...
{/foreach}
È possibile passare la propria funzione di confronto come parametro:
{var $sorted = ($names|sort: fn($a, $b) => $b <=> $a)}
spaceless
Rimuove gli spazi bianchi non necessari dall'output. Si può anche usare l'alias strip
.
{block |spaceless}
<ul>
<li>Hello</li>
</ul>
{/block}
Stampa:
<ul> <li>Hello</li> </ul>
stripHtml
Converte l'HTML in testo normale. Ossia, rimuove i tag HTML e converte le entità HTML in testo.
{='<p>one < two</p>'|stripHtml} {* outputs 'one < two' *}
Il testo normale risultante può naturalmente contenere caratteri che rappresentano tag HTML, ad esempio
'<p>'|stripHtml
viene convertito in <p>
. Non inviare mai il testo risultante con
|noescape
, perché ciò potrebbe causare una vulnerabilità della sicurezza.
substr (int offset, int length = null)
Estrae una fetta di una stringa. Questo filtro è stato sostituito da un filtro a fetta.
{$string|substr: 1, 2}
translate (string message, …args)
Traduce le espressioni in altre lingue. Per rendere disponibile il filtro, è necessario impostare il traduttore. Si possono anche usare i tag per la traduzione.
<a href="basket">{='Baskter'|translate}</a>
<span>{$item|translate}</span>
trim (string charlist =
" \t\n\r\0\x0B\u{A0}"
)
Spogliare i caratteri iniziali e finali, per impostazione predefinita gli spazi bianchi.
{=' I like Latte. '|trim} {* outputs 'I like Latte.' *}
{=' I like Latte.'|trim: '.'} {* outputs ' I like Latte' *}
truncate (int length, string append =
'…'
)
Accorcia una stringa alla lunghezza massima indicata, ma cerca di conservare le parole intere. Se la stringa è troncata, aggiunge un'ellissi alla fine (questo può essere cambiato con il secondo parametro).
{var $title = 'Hello, how are you?'}
{$title|truncate:5} {* Hell… *}
{$title|truncate:17} {* Hello, how are… *}
{$title|truncate:30} {* Hello, how are you? *}
upper
Converte un valore in maiuscolo. Richiede l'estensione PHP mbstring
.
{='latte'|upper} {* outputs 'LATTE' *}
Vedere anche capitalize, firstUpper, lower.
webalize
Converte in ASCII.
Converte gli spazi in trattini. Rimuove i caratteri che non sono alfanumerici, sottolineati o trattini. Converte in minuscolo. Elimina anche gli spazi bianchi iniziali e finali.
{var $s = 'Our 10. product'}
{$s|webalize} {* outputs 'our-10-product' *}
Richiede il pacchetto nette/utils.