Latte filtry
V šablonách můžeme používat funkce, které pomáhají upravit nebo přeformátovat data do výsledné podoby. Říkáme jim filtry.
capitalize |
malá písmena, první písmeno ve slovech velké |
firstLower |
převede první písmeno na malé |
firstUpper |
převede první písmeno na velké |
lower |
převede na malá písmena |
upper |
převede na velká písmena |
ceil |
zaokrouhlí číslo nahoru na danou přesnost |
floor |
zaokrouhlí číslo dolů na danou přesnost |
round |
zaokrouhlí číslo na danou přesnost |
accept |
potvrzuje nové chování chytrých atributů |
toggle |
přepíná přítomnost HTML atributu |
escapeUrl |
escapuje parametr v URL |
noescape |
vypíše proměnnou bez escapování |
query |
generuje query string v URL |
Dále existují escapovací filtry pro HTML (escapeHtml a escapeHtmlComment), XML
(escapeXml), JavaScript (escapeJs), CSS (escapeCss) a iCalendar (escapeICal),
které Latte používá samo díky kontextově sensitivnímu escapování a
nemusíte je zapisovat.
checkUrl |
ošetří URL adresu od nebezpečných vstupů |
nocheck |
předejde automatickému ošetření URL adresy |
Latte atributy src a href kontroluje automaticky, takže filtr checkUrl
téměř nemusíte používat.
Všechny výchozí filtry jsou určeny pro řetězce v kódování UTF‑8.
Použití
Filtry se zapisují za svislítko (může být před ním mezera):
<h1>{$heading|upper}</h1>
Filtry lze zřetězit a poté se aplikují v pořadí zleva doprava:
<h1>{$heading|lower|capitalize}</h1>
Parametry se zadávají za jménem filtru oddělené dvojtečkami nebo čárkami:
<h1>{$heading|truncate:20,''}</h1>
Filtry lze aplikovat i na výraz:
{var $name = ($title|upper) . ($subtitle|lower)}
Vlastní filtry lze registrovat tímto způsobem:
$latte = new Latte\Engine;
$latte->addFilter('shortify', fn(string $s, int $len = 10) => mb_substr($s, 0, $len));
V šabloně se potom volá takto:
<p>{$text|shortify}</p>
<p>{$text|shortify:100}</p>
Nullsafe filtry
Jakýkoliv filtr lze učinit nullsafe použitím ?| místo |. Pokud je hodnota null,
filtr se nevykoná a vrátí se null. Přeskočí se i filtry, které v řetězci následují.
To je užitečné v kombinaci s HTML atributy, které jsou vynechány, pokud je hodnota null.
<div title={$title?|upper}>
{* Pokud je $title null: <div> *}
{* Pokud je $title 'hello': <div title="HELLO"> *}
Filtry
accept
Filtr se používá při migraci z Latte 3.0 k potvrzení, že jste zkontrolovali změnu chování atributu a akceptujete ji. Nemění hodnotu.
Jde o dočasný nástroj. Jakmile migraci dokončíte a vypnete migrační varování, měli byste tento filtr ze svých šablon odstranit.
batch (int $length, mixed $rest=null): Generator
Filtr, který zjednodušuje výpis lineárních dat do podoby tabulky. Vrací generátor polí se zadaným počtem položek. Pokud zadáte druhý parametr, použije se k doplnění chybějících položek na posledním řádku.
{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>
Vypíše:
<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>
Viz také group a značka iterateWhile.
breakLines
Přidává před každý znak nového řádku HTML značku <br>.
{var $s = "Text & with \n newline"}
{$s|breakLines} {* vypíše "Text & with <br>\n newline" *}
bytes (int $precision=2)
Formátuje velikost v bajtech do lidsky čitelné podoby. Pokud je nastavené národní prostředí, použijí se odpovídající oddělovače desetinných míst a tisíců.
{$size|bytes} {* 0 B, 1.25 GB, … *}
{$size|bytes:0} {* 10 B, 1 GB, … *}
ceil (int $precision=0)
Zaokrouhlí číslo nahoru na danou přesnost.
{=3.4|ceil} {* vypíše 4 *}
{=135.22|ceil:1} {* vypíše 135.3 *}
{=135.22|ceil:3} {* vypíše 135.22 *}
capitalize
Slova budou začínat velkými písmeny, všechny zbývající znaky budou malé. Vyžaduje PHP rozšíření
mbstring.
{='i like LATTE'|capitalize} {* vypíše 'I Like Latte' *}
Viz také firstLower, firstUpper, lower, upper.
checkUrl
Vynutí ošetření URL adresy. Kontroluje, zda URL používá bezpečné schéma (http, https,
ftp, mailto, tel, sms) nebo jde o relativní odkaz, a blokuje nebezpečná
schémata jako javascript:, která mohou představovat bezpečnostní riziko.
{var $link = 'javascript:window.close()'}
<a data-href={$link|checkUrl}>kontrolované</a>
<a data-href={$link}>nekontrolované</a>
Vypíše:
<a data-href="">kontrolované</a>
<a data-href="javascript:window.close()">nekontrolované</a>
Viz také nocheck.
clamp (int|float $min, int|float $max)
Ohraničí hodnotu do daného rozsahu min až max včetně obou mezí.
{$level|clamp: 0, 255}
Existuje také jako funkce.
column (string|int|null $columnKey, string|int|null $indexKey=null)
Vrátí z vícerozměrného pole hodnoty jednoho sloupce $columnKey jako nové pole. Lze použít i na pole
objektů pro získání hodnot vlastností.
{var $users = [
[id: 30, name: 'John', age: 30],
[id: 32, name: 'Jane', age: 25],
[id: 33, age: 35],
]}
{$users|column: 'name'}
{* vrátí ['John', 'Jane'] *}
{$users|column: 'name', 'id'}
{* vrátí [30 => 'John', 32 => 'Jane'] *}
Pokud předáte null jako klíč sloupce, přeindexuje pole podle $indexKey.
commas (?string $lastGlue=null)
Spojí prvky pole čárkou a mezerou (', '). Jde o pohodlnou zkratku pro běžný výpis položek v čitelné
podobě.
{var $items = ['jablka', 'pomeranče', 'banány']}
{$items|commas}
{* vypíše 'jablka, pomeranče, banány' *}
Lze zadat i vlastní oddělovač pro poslední dvojici položek:
{$items|commas: ' a '}
{* vypíše 'jablka, pomeranče a banány' *}
{=['PHP', 'JavaScript', 'Python']|commas: ' nebo '}
{* vypíše 'PHP, JavaScript nebo Python' *}
Viz také implode.
dataStream (?string $type=null)
Konvertuje obsah do schématu data URI. Pomocí něj lze do HTML nebo CSS vkládat obrázky bez nutnosti odkazovat na externí
soubory. Pokud je $type null, MIME typ se detekuje automaticky.
Mějme v proměnné obrázek $img = Image::fromFile('obrazek.gif'), poté
<img src={$img|dataStream}>
Vypíše například:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==">
Vyžaduje PHP rozšíření fileinfo.
date (string $format='j. n. Y')
Formátuje datum a čas podle masky používané PHP funkcí date. Filtr přijímá datum ve
formátu UNIX timestamp, jako řetězec, objekt typu DateTimeInterface nebo DateInterval.
{$today|date:'j. n. Y'}
Viz také localDate.
escapeUrl
Escapuje proměnnou pro použití jako parametr v URL.
<a href="http://example.com/{$name|escapeUrl}">{$name}</a>
Viz také query.
explode (string
$separator='')
Rozdělí řetězec na pole podle oddělovače. Alias pro split.
{='one,two,three'|explode:','} {* vrací ['one', 'two', 'three'] *}
Pokud je oddělovač prázdný řetězec (výchozí hodnota), bude vstup rozdělen na jednotlivé znaky:
{='123'|explode} {* vrací ['1', '2', '3'] *}
Můžete také použít alias split:
{='1,2,3'|split:','} {* vrací ['1', '2', '3'] *}
Viz také implode.
filter (callable $predicate): iterable
Filtruje prvky pole nebo iterátoru a ponechá jen ty, pro které predikát vrátí true. Klíče zůstávají
zachovány.
{foreach ($people|filter: fn($person) => $person->age >= 18) as $adult}
<p>{$adult->name}</p>
{/foreach}
first
Vrací první prvek pole nebo znak řetězce:
{=[1, 2, 3, 4]|first} {* vypíše 1 *}
{='abcd'|first} {* vypíše 'a' *}
floor (int $precision=0)
Zaokrouhlí číslo dolů na danou přesnost.
{=3.5|floor} {* vypíše 3 *}
{=135.79|floor:1} {* vypíše 135.7 *}
{=135.79|floor:3} {* vypíše 135.79 *}
firstLower
Převede první písmeno na malé. Vyžaduje PHP rozšíření mbstring.
{='The Latte'|firstLower} {* vypíše 'the Latte' *}
Viz také capitalize, firstUpper, lower, upper.
firstUpper
Převede první písmeno na velké. Vyžaduje PHP rozšíření mbstring.
{='the latte'|firstUpper} {* vypíše 'The latte' *}
Viz také capitalize, firstLower, lower, upper.
group (string|int|\Closure $by): iterable
Filtr seskupí data podle různých kritérií.
V tomto příkladu se řádky v tabulce seskupují podle sloupce categoryId. Výstupem je iterovatelná
struktura skupin, kde klíčem je hodnota ve sloupci categoryId. Přečtěte si podrobný návod.
{foreach ($items|group: categoryId) as $categoryId => $categoryItems}
<ul>
{foreach $categoryItems as $item}
<li>{$item->name}</li>
{/foreach}
</ul>
{/foreach}
Viz také batch, funkce group a značka iterateWhile.
implode (string $glue='')
Vrátí řetězec, který je zřetězením položek sekvence. Alias pro join.
{=[1, 2, 3]|implode} {* vypíše '123' *}
{=[1, 2, 3]|implode:'|'} {* vypíše '1|2|3' *}
Můžete také použít alias join:
{=[1, 2, 3]|join} {* vypíše '123' *}
indent (int $level=1, string
$chars="\t")
Odsadí text zleva o daný počet tabulátorů nebo jiných znaků, které můžeme uvést ve druhém argumentu. Prázdné řádky nejsou odsazeny.
<div>
{block |indent}
<p>Hello</p>
{/block}
</div>
Vypíše:
<div>
<p>Hello</p>
</div>
last
Vrací poslední prvek pole nebo znak řetězce:
{=[1, 2, 3, 4]|last} {* vypíše 4 *}
{='abcd'|last} {* vypíše 'd' *}
length
Vrátí délku řetězce nebo pole.
- pro řetězce vrátí délku v UTF‑8 znacích
- pro pole vrátí počet položek
- pro objekty, které implementují rozhraní Countable, použije návratovou hodnotu metody count()
- pro objekty, které implementují rozhraní Traversable, použije návratovou hodnotu funkce iterator_count()
{if ($users|length) > 10}
...
{/if}
localDate (?string $format=null, ?string $date=null, ?string $time=null)
Formátuje datum a čas podle národního prostředí, což
zajišťuje konzistentní a lokalizované zobrazení časových údajů napříč různými jazyky a regiony. Filtr přijímá
datum jako UNIX timestamp, řetězec nebo objekt typu DateTimeInterface.
{$date|localDate} {* 15. dubna 2024 *}
{$date|localDate: format: yM} {* 4/2024 *}
{$date|localDate: date: medium} {* 15. 4. 2024 *}
Pokud použijete filtr bez parametrů, vypíše se datum v úrovni long, viz dále.
a) použití formátu
Parametr format popisuje, které časové složky se mají zobrazit. Používá pro ně písmenné kódy, jejichž
počet opakování ovlivňuje šířku výstupu:
| rok | y / yy / yyyy |
2024 / 24 / 2024 |
| měsíc | M / MM / MMM / MMMM |
8 / 08 / srp / srpen |
| den | d / dd / E / EEEE |
1 / 01 / ne / neděle |
| hodina | j / H / h |
preferovaný / 24hodinový / 12hodinový |
| minuta | m / mm |
5 / 05 (2 číslice v kombinaci se sekundami) |
| sekunda | s / ss |
8 / 08 (2 číslice v kombinaci s minutami) |
Na pořadí kódů ve formátu nezáleží, protože pořadí složek se vypíše podle zvyklostí národního prostředí.
Formát je tedy na něm nezávislý. Například formát yyyyMMMMd v prostředí en_US vypíše
April 15, 2024, zatímco v prostředí cs_CZ vypíše 15. dubna 2024:
| locale: | cs_CZ | en_US |
|---|---|---|
format: 'dMy' |
10. 8. 2024 | 8/10/2024 |
format: 'yM' |
8/2024 | 8/2024 |
format: 'yyyyMMMM' |
srpen 2024 | August 2024 |
format: 'MMMM' |
srpen | August |
format: 'jm' |
17:22 | 5:22 PM |
format: 'Hm' |
17:22 | 17:22 |
format: 'hm' |
5:22 odp. | 5:22 PM |
b) použití přednastavených stylů
Parametry date a time určují, jak podrobně se má datum a čas vypsat. Můžete si vybrat
z několika úrovní: full, long, medium, short. Lze nechat vypsat jen datum,
jen čas, nebo obojí:
| locale: | cs_CZ | en_US |
|---|---|---|
date: short |
23.01.78 | 1/23/78 |
date: medium |
23. 1. 1978 | Jan 23, 1978 |
date: long |
23. ledna 1978 | January 23, 1978 |
date: full |
pondělí 23. ledna 1978 | Monday, January 23, 1978 |
time: short |
8:30 | 8:30 AM |
time: medium |
8:30:59 | 8:30:59 AM |
time: long |
8:30:59 SEČ | 8:30:59 AM GMT+1 |
date: short, time: short |
23.01.78 8:30 | 1/23/78, 8:30 AM |
date: medium, time: short |
23. 1. 1978 8:30 | Jan 23, 1978, 8:30 AM |
date: long, time: short |
23. ledna 1978 v 8:30 | January 23, 1978 at 8:30 AM |
U data lze navíc použít prefix relative- (např. relative-short), který pro data blízká
současnosti zobrazí včera, dnes nebo zítra, jinak se vypíše standardním
způsobem.
{$date|localDate: date: relative-short} {* včera *}
Viz také date.
lower
Převede řetězec na malá písmena. Vyžaduje PHP rozšíření mbstring.
{='LATTE'|lower} {* vypíše 'latte' *}
Viz také capitalize, firstLower, firstUpper, upper.
map (callable $transformer): iterable
Transformuje každý prvek pole nebo iterátoru pomocí callbacku a vrací nový iterátor. Je protějškem filtru filter. Klíče zůstávají zachovány.
{=($users|map: fn($user) => $user->name)|implode: ', '} {* John, Mary, Paul *}
Viz také filter.
nocheck
Předejde automatickému ošetření URL adresy. Latte automaticky kontroluje, zda URL používá bezpečné
schéma (např. http, https, ftp, mailto, tel, sms)
nebo jde o relativní odkaz, a blokuje potenciálně nebezpečné.
Pokud odkaz používá jiné schéma, např. javascript: nebo data:, a jste si jistí jeho obsahem,
můžete kontrolu vypnout pomocí |nocheck.
{var $link = 'javascript:window.close()'}
<a href={$link}>kontrolované</a>
<a href={$link|nocheck}>nekontrolované</a>
Vypíše:
<a href="">kontrolované</a>
<a href="javascript:window.close()">nekontrolované</a>
Viz také checkUrl.
noescape
Zakáže automatické escapování.
{var $trustedHtmlString = '<b>hello</b>'}
Escapovaný: {$trustedHtmlString}
Neescapovaný: {$trustedHtmlString|noescape}
Vypíše:
Escapovaný: <b>hello</b>
Neescapovaný: <b>hello</b>
Špatné použití filtru noescape může vést ke vzniku zranitelnosti XSS! Nikdy jej
nepoužívejte, pokud si nejste zcela jisti, co děláte, a že vypisovaný řetězec pochází z důvěryhodného
zdroje.
number (int $decimals=0, string
$decPoint='.', string $thousandsSep=',')
Formátuje číslo na určitý počet desetinných míst. Pokud je nastavené národní prostředí, použijí se odpovídající oddělovače desetinných míst a tisíců.
{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 *}
number (string $format)
Parametr format umožňuje definovat vzhled čísel přesně podle vašich potřeb. K tomu je potřeba mít
nastavené národní prostředí. Formát se skládá z několika
speciálních znaků, jejichž kompletní popis najdete v dokumentaci DecimalFormat:
0povinná číslice, vždy se zobrazí, i kdyby to byla nula#volitelná číslice, zobrazí se jen tehdy, pokud na tomto místě číslo skutečně je@významná číslice, pomáhá zobrazit číslo s určitým počtem platných číslic.označuje, kde má být desetinná čárka (nebo tečka, podle země),slouží k oddělení skupin číslic, nejčastěji tisíců%číslo vynásobí 100× a přidá znak procenta
Pojďme se podívat na příklady. V prvním příkladu jsou dvě desetinná místa povinná, ve druhém volitelná. Třetí příklad ukazuje doplnění nulami zleva i zprava, čtvrtý zobrazuje jen existující číslice:
{1234.5|number: '#,##0.00'} {* 1,234.50 *}
{1234.5|number: '#,##0.##'} {* 1,234.5 *}
{1.23 |number: '000.000'} {* 001.230 *}
{1.2 |number: '##.##'} {* 1.2 *}
Významné číslice určují, kolik číslic bez ohledu na desetinnou čárku má být zobrazeno, přičemž se zaokrouhluje:
{1234|number: '@@'} {* 1200 *}
{1234|number: '@@@'} {* 1230 *}
{1234|number: '@@@#'} {* 1234 *}
{1.2345|number: '@@@'} {* 1.23 *}
{0.00123|number: '@@'} {* 0.0012 *}
Existuje i snadný způsob, jak zobrazit číslo v procentech. Číslo se vynásobí 100× a přidá se znak
%:
{0.1234|number: '#.##%'} {* 12.34% *}
Můžeme definovat odlišný formát pro kladná a záporná čísla, odděluje je znak ;. Tímto způsobem lze
například nastavit, že kladná čísla se mají zobrazovat se znaménkem +:
{42|number: '#.##;(#.##)'} {* 42 *}
{-42|number: '#.##;(#.##)'} {* (42) *}
{42|number: '+#.##;-#.##'} {* +42 *}
{-42|number: '+#.##;-#.##'} {* -42 *}
Pamatujte, že skutečný vzhled čísel se může lišit podle nastavení země. Například v některých zemích se používá čárka místo tečky jako oddělovač desetinných míst. Tento filtr to automaticky zohlední a nemusíte se o nic starat.
padLeft (int $length, string
$append=' ')
Doplní řetězec nebo číslo do určité délky jiným řetězcem zleva.
{='hello'|padLeft: 10, '123'} {* vypíše '12312hello' *}
{=123|padLeft: 5, '0'} {* vypíše '00123' *}
padRight (int $length, string
$append=' ')
Doplní řetězec nebo číslo do určité délky jiným řetězcem zprava.
{='hello'|padRight: 10, '123'} {* vypíše 'hello12312' *}
{=123|padRight: 5, '0'} {* vypíše '12300' *}
query
Dynamicky generuje query string v URL:
<a href="http://example.com/?{[name: 'John Doe', age: 43]|query}">click</a>
<a href="http://example.com/?search={$search|query}">search</a>
Vypíše:
<a href="http://example.com/?name=John+Doe&age=43">click</a>
<a href="http://example.com/?search=Foo+Bar">search</a>
Klíče s hodnotou null se vynechají.
Viz také escapeUrl.
random
Vrací náhodný prvek pole nebo znak řetězce:
{=[1, 2, 3, 4]|random} {* vypíše např.: 3 *}
{='abcd'|random} {* vypíše např.: 'b' *}
repeat (int $count)
Opakuje řetězec x-krát.
{='hello'|repeat: 3} {* vypíše 'hellohellohello' *}
replace (string|array $search, string|array
$replace='')
Nahradí všechny výskyty hledaného řetězce jiným řetězcem.
{='hello world'|replace: 'world', 'friend'} {* vypíše 'hello friend' *}
Lze provést i více záměn najednou:
{='hello world'|replace: [h => l, l => h]} {* vypíše 'lehho worhd' *}
replaceRE (string $pattern, string
$replacement='')
Vyhledá a nahradí text podle regulárního výrazu.
{='hello world'|replaceRE: '/l.*/', 'l'} {* vypíše 'hel' *}
reverse (bool $preserveKeys=false)
Obrátí daný řetězec nebo pole.
{var $s = 'Nette'}
{$s|reverse} {* vypíše 'etteN' *}
{var $a = ['N', 'e', 't', 't', 'e']}
{$a|reverse} {* vrací ['e', 't', 't', 'e', 'N'] *}
round (int $precision=0)
Zaokrouhlí číslo na danou přesnost.
{=3.4|round} {* vypíše 3 *}
{=3.5|round} {* vypíše 4 *}
{=135.79|round:1} {* vypíše 135.8 *}
{=135.79|round:3} {* vypíše 135.79 *}
slice (int $start, ?int $length=null, bool $preserveKeys=false)
Extrahuje část pole, řetězce nebo iterátoru.
{='hello'|slice: 1, 2} {* vypíše 'el' *}
{=['a', 'b', 'c']|slice: 1, 2} {* vypíše ['b', 'c'] *}
Filtr funguje jako funkce PHP array_slice pro pole nebo mb_substr pro řetězce. Pro iterátory
vrací generátor – prvky se čtou z původního zdroje jeden po druhém a po dosažení limitu se čtení zastaví. Celý
iterátor se do paměti načte jen tehdy, když je start nebo length záporný, protože taková pozice
se počítá od jeho konce.
Pokud je start nezáporný, posloupnost začne posunutá o tento počet od začátku pole/řetězce. Pokud je záporný, posloupnost začne posunutá o tolik od konce.
Pokud je zadaný parametr length a je kladný, posloupnost bude obsahovat až tolik prvků. Pokud je vstup kratší než length, budou přítomny jen dostupné prvky. Pokud je zadaný parametr length záporný, posloupnost skončí o tolik prvků od konce vstupu. Pokud tento parametr nezadáte, posloupnost bude obsahovat všechny prvky od pozice start až do konce vstupu.
Ve výchozím nastavení filtr změní pořadí a resetuje celočíselné klíče pole. Toto chování lze změnit nastavením preserveKeys na true. Řetězcové klíče jsou vždy zachovány, bez ohledu na tento parametr.
Viz také limit.
limit (int $length)
Omezí délku pole, řetězce nebo iterátoru. U polí a iterátorů zachovává klíče. U řetězců respektuje UTF-8.
{foreach ($items|limit: 5) as $item}
...
{/foreach}
{$text|limit: 100}
sort (?Closure $comparison=null, string|int|\Closure|null $by=null, string|int|\Closure|bool $byKey=false)
Filtr seřadí prvky pole nebo iterátoru a zachová jejich asociační klíče. Při nastaveném národním prostředí se řazení řídí jeho pravidly, pokud není zadána vlastní porovnávací funkce.
{foreach ($names|sort) as $name}
...
{/foreach}
Řazené pole v opačném pořadí:
{foreach ($names|sort|reverse) as $name}
...
{/foreach}
Můžete zadat vlastní porovnávací funkci pro řazení (příklad ukazuje, jak řadit obráceně, od největšího po nejmenší):
{var $reverted = ($names|sort: fn($a, $b) => $b <=> $a)}
Filtr |sort také umožňuje řadit prvky podle klíčů:
{foreach ($names|sort: byKey: true) as $name}
...
{/foreach}
Pokud potřebujete seřadit tabulku podle konkrétního sloupce, můžete použít parametr by. Hodnota
'name' v ukázce určuje, že se bude řadit podle $item->name nebo $item['name'],
v závislosti na tom, zda je $item pole nebo objekt:
{foreach ($items|sort: by: 'name') as $item}
{$item->name}
{/foreach}
Můžete také definovat callback funkci, která určí hodnotu, podle které se má řadit:
{foreach ($items|sort: by: fn($item) => $item->category->name) as $item}
{$item->name}
{/foreach}
Stejným způsobem lze využít i parametr byKey.
spaceless
Odstraní zbytečné bílé znaky (mezery) z výstupu. Můžete také použít zastaralý alias strip, preferuje
se však spaceless.
{block |spaceless}
<ul>
<li>Hello</li>
</ul>
{/block}
Vypíše:
<ul><li>Hello</li></ul>
stripHtml
Převádí HTML na čistý text. Tedy odstraní z něj HTML značky a HTML entity převede na text.
{='<p>one < two</p>'|stripHtml} {* vypíše 'one < two' *}
Výsledný čistý text může přirozeně obsahovat znaky, které představují HTML značky, například
'<p>'|stripHtml se převede na <p>. V žádném případě nevypisujte takto
vzniklý text s |noescape, protože to může vést ke vzniku bezpečnostní díry.
substr (int $start, ?int $length=null)
Extrahuje část řetězce. Tento filtr byl nahrazen filtrem slice.
{$string|substr: 1, 2}
toggle
Filtr toggle ovládá přítomnost atributu na základě boolean hodnoty. Pokud je hodnota truthy, atribut je
přítomen; pokud je falsy, atribut je zcela vynechán:
<div uk-grid={$isGrid|toggle}>
{* Pokud je $isGrid truthy: <div uk-grid> *}
{* Pokud je $isGrid falsy: <div> *}
Tento filtr je užitečný pro vlastní atributy nebo atributy JavaScriptových knihoven, které vyžadují kontrolu přítomnosti/nepřítomnosti podobně jako HTML boolean atributy.
Filtr lze použít pouze uvnitř HTML atributů.
translate (…$args)
Překládá výrazy do jiných jazyků. Aby byl filtr k dispozici, je potřeba nastavit překladač. Můžete také použít tagy pro překlad.
<a href="basket">{='Košík'|translate}</a>
<span>{$item|translate}</span>
trim (string
$charlist=" \t\n\r\0\x0B\u{A0}")
Odstraní bílé znaky (nebo jiné zadané znaky) ze začátku a konce řetězce.
{=' I like Latte. '|trim} {* vypíše 'I like Latte.' *}
{=' I like Latte.'|trim: '.'} {* vypíše ' I like Latte' *}
truncate (int $length, string
$append='…')
Ořízne řetězec na uvedenou maximální délku, přičemž se snaží zachovávat celá slova. Pokud dojde ke zkrácení řetězce, přidá na konec trojtečku (lze změnit druhým parametrem).
{var $title = 'Hello, how are you?'}
{$title|truncate:5} {* Hell… *}
{$title|truncate:17} {* Hello, how are… *}
{$title|truncate:30} {* Hello, how are you? *}
upper
Převede řetězec na velká písmena. Vyžaduje PHP rozšíření mbstring.
{='latte'|upper} {* vypíše 'LATTE' *}
Viz také capitalize, firstLower, firstUpper, lower.
webalize
Upraví UTF‑8 řetězec do tvaru používaného v URL.
Převádí se na ASCII. Převede mezery na pomlčky. Odstraní znaky, které nejsou alfanumerické, podtržítka ani pomlčky. Převede na malá písmena. Také odstraní počáteční a koncové mezery.
{var $s = 'Náš 10. produkt'}
{$s|webalize} {* vypíše 'nas-10-produkt' *}
Vyžaduje knihovnu nette/utils.