Latte filtry
Filtry v šablonách Latte pomáhají upravit nebo přeformátovat data do požadované podoby
capitalize |
převede první písmeno každého slova na velké |
firstUpper |
převede první písmeno na velké |
lower |
převede text na malá písmena |
upper |
převede text na velká písmena |
ceil |
zaokrouhlí číslo nahoru |
floor |
zaokrouhlí číslo dolů |
round |
zaokrouhlí číslo |
escapeUrl |
escapuje parametr v URL |
noescape |
vypne automatické escapování |
query |
generuje query string v URL |
Latte automaticky používá escapovací filtry pro HTML (escapeHtml
a escapeHtmlComment
), XML
(escapeXml
), JavaScript (escapeJs
), CSS (escapeCss
) a iCalendar (escapeICal
)
díky kontextově sensitivnímu escapování. Tyto filtry
není třeba explicitně zapisovat.
checkUrl |
zkontroluje a případně upraví URL adresu |
nocheck |
vypne automatickou kontrolu URL adresy |
Všechny výchozí filtry jsou navrženy pro práci s řetězci v kódování UTF-8.
Použití
Filtry se aplikují pomocí svislítka za proměnnou nebo výrazem:
Filtry lze řetězit, v takovém případě se aplikují zleva doprava:
Parametry filtrů se zadávají za dvojtečkou:
Filtry lze použít i na výrazy:
Vlastní filtry se registrují následovně:
V šabloně se pak volají stejně jako vestavěné filtry:
Filtry
batch (int $length, mixed $item): array
Filtr batch
usnadňuje výpis lineárních dat do tabulkové struktury. Vrací pole polí s požadovaným počtem
položek. Pokud zadáte druhý parametr, použije se k doplnění chybějících položek v posledním řádku.
Výstup:
Viz také group a značka iterateWhile.
breakLines
Filtr breakLines
vkládá HTML značku <br>
před každý znak nového řádku.
bytes (int $precision=2)
Filtr bytes
formátuje velikost v bajtech do lidsky čitelné podoby. Pokud je nastaveno národní prostředí, použijí se odpovídající oddělovače desetinných míst a
tisíců.
Viz také number.
ceil (int $precision=0)
Filtr ceil
zaokrouhlí číslo nahoru na danou přesnost.
capitalize
Filtr capitalize
upraví text tak, že první písmeno každého slova bude velké a zbývající malá. Vyžaduje
PHP rozšíření mbstring
.
Viz také firstUpper, lower, upper.
checkUrl
Filtr checkUrl
zajistí kontrolu a případné ošetření URL adresy. Ověří, zda proměnná obsahuje webovou
URL (tj. protokol HTTP/HTTPS) a zabrání vypsání odkazů, které by mohly představovat bezpečnostní riziko.
Výstup:
Latte automaticky kontroluje atributy src
a href
,
takže filtr checkUrl
většinou není nutné explicitně uvádět.
Viz také nocheck.
clamp (int|float $min, int|float $max)
Filtr clamp
omezí hodnotu do zadaného inkluzivního rozsahu min a max.
K dispozici je také jako funkce.
dataStream (string $mimetype=detect)
Filtr dataStream
konvertuje obsah do schématu data URI. To umožňuje vkládat obrázky přímo do HTML nebo CSS
bez nutnosti odkazovat na externí soubory.
Pokud máme v proměnné obrázek $img = Image::fromFile('obrazek.gif')
, potom
vypíše například:
Vyžaduje PHP rozšíření fileinfo
.
date (string $format)
Filtr date
formátuje datum a čas podle zadané masky, kterou používá PHP funkce date. Filtr akceptuje datum ve formátu UNIX timestamp, jako řetězec nebo objekt typu
DateTimeInterface
.
Viz také localDate.
escapeUrl
Filtr escapeUrl
escapuje proměnnou pro bezpečné použití jako parametr v URL.
Viz také query.
explode (string
$separator=''
)
Filtr explode
rozdělí řetězec na pole podle zadaného oddělovače. Je to alias pro split
.
Pokud je oddělovač prázdný řetězec (výchozí hodnota), vstup se rozdělí na jednotlivé znaky:
Můžete také použít alias split
:
Viz také implode.
first
Filtr first
vrací první prvek pole nebo první znak řetězce:
floor (int $precision=0)
Filtr floor
zaokrouhlí číslo dolů na danou přesnost.
firstUpper
Filtr firstUpper
převede první písmeno na velké. Vyžaduje PHP rozšíření mbstring
.
Viz také capitalize, lower, upper.
group (string|int|\Closure $by): array
Filtr group
umožňuje seskupit data podle různých kritérií.
V tomto příkladu se řádky v tabulce seskupují podle sloupce categoryId
. Výstupem je pole polí, kde
klíčem je hodnota ve sloupci categoryId
. Přečtěte si podrobný návod.
Viz také batch, funkce group a značka iterateWhile.
implode (string $glue=''
)
Filtr implode
spojí prvky pole do řetězce. Je to alias pro join
.
Můžete také použít alias join
:
indent (int $level=1, string
$char="\t"
)
Filtr indent
odsadí text zleva o zadaný počet tabulátorů nebo jiných znaků. Prázdné řádky nejsou
odsazeny.
Výstup:
last
Filtr last
vrací poslední prvek pole nebo poslední znak řetězce:
length
Filtr length
vrátí délku řetězce nebo počet prvků v poli.
- pro řetězce vrátí počet unicode znaků
- pro pole vrátí počet prvků
- pro objekty implementující rozhraní Countable použije návratovou hodnotu metody count()
- pro objekty implementující rozhraní IteratorAggregate použije návratovou hodnotu funkce iterator_count()
localDate (?string $format=null, ?string $date=null, ?string $time=null)
Filtr localDate
formátuje datum a čas podle národního prostředí. To
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
.
Bez parametrů se datum vypíše v úrovni long
(viz dále).
a) použití formátu
Parametr format
definuje, které časové složky se mají zobrazit. Používá písmena jako 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) |
Pořadí kódů ve formátu nemá vliv na pořadí složek ve výstupu, protože to se řídí zvyklostmi 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í úroveň podrobnosti pro výpis data a času. K dispozici jsou
úrovně: full
, long
, medium
, short
. Můžete 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 |
Pro datum lze 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.
Viz také date.
lower
Filtr lower
převede řetězec na malá písmena. Vyžaduje PHP rozšíření mbstring
.
Viz také capitalize, firstUpper, upper.
nocheck
Filtr nocheck
vypne automatickou kontrolu URL adresy. Latte standardně kontroluje, zda proměnná obsahuje webovou URL (tj. protokol HTTP/HTTPS) a
brání vypsání potenciálně nebezpečných odkazů.
Pokud odkaz používá jiné schéma, např. javascript:
nebo data:
, a jste si jisti jeho obsahem,
můžete kontrolu vypnout pomocí |nocheck
.
Výstup:
Viz také checkUrl.
noescape
Filtr noescape
vypne automatické escapování.
Výstup:
Nesprávné použití filtru noescape
může vést ke zranitelnosti XSS! Používejte jej pouze
tehdy, když si jste naprosto jisti, že vypisovaný řetězec pochází z důvěryhodného zdroje.
number (int $decimals=0, string
$decPoint='.'
, string $thousandsSep=','
)
Filtr number
formátuje číslo na zadaný počet desetinných míst. Pokud je nastaveno národní prostředí, použijí se odpovídající oddělovače desetinných míst a
tisíců.
number (string $format)
Parametr format
umožňuje přesně definovat vzhled čísel podle vašich potřeb. K tomu je nutné 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:
0
povinná čí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 pozici desetinné čárky (nebo tečky, podle země),
slouží k oddělení skupin číslic, nejčastěji tisíců%
číslo vynásobí 100× a přidá znak procenta
Podívejme se 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:
Významné číslice určují, kolik číslic bez ohledu na desetinnou čárku má být zobrazeno, přičemž dochází k zaokrouhlování:
Snadný způsob, jak zobrazit číslo jako procenta. Číslo se vynásobí 100× a přidá se znak %
:
Můžeme definovat odlišný formát pro kladná a záporná čísla, oddělené znakem ;
. Tímto způsobem lze
například nastavit, že kladná čísla se mají zobrazovat se znaménkem +
:
Nezapomeňte, ž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í, takže se o to nemusíte starat.
padLeft (int $length, string
$pad=' '
)
Filtr padLeft
doplní řetězec zleva na požadovanou délku jiným řetězcem.
padRight (int $length, string
$pad=' '
)
Filtr padRight
doplní řetězec zprava na požadovanou délku jiným řetězcem.
query
Filtr query
dynamicky generuje query string v URL:
Výstup:
Klíče s hodnotou null
se vynechají.
Viz také escapeUrl.
random
Filtr random
vrací náhodný prvek pole nebo náhodný znak řetězce:
repeat (int $count)
Filtr repeat
opakuje řetězec zadaný počet krát.
replace (string|array $search, string
$replace=''
)
Filtr replace
nahradí všechny výskyty hledaného řetězce náhradním řetězcem.
Lze provést i více záměn najednou:
replaceRE (string $pattern, string
$replace=''
)
Filtr replaceRE
provádí nahrazování podle regulárních výrazů.
reverse
Filtr reverse
obrátí pořadí znaků v řetězci nebo prvků v poli.
round (int $precision=0)
Filtr round
zaokrouhlí číslo na zadanou přesnost.
slice (int $start, ?int $length=null, bool $preserveKeys=false)
Filtr slice
extrahuje část pole nebo řetězce.
Tento filtr funguje jako funkce PHP array_slice
pro pole nebo mb_substr
pro řetězce s fallbackem
na funkci iconv_substr
v režimu UTF-8.
Pokud je start
kladný, posloupnost začíná posunutá o tento počet od začátku pole/řetězce. Pokud je
záporný, posloupnost začíná posunutá o tolik od konce.
Pokud je zadán parametr length
a je kladný, posloupnost bude obsahovat tolik prvků. Pokud je do této funkce
předán záporný parametr length
, posloupnost bude obsahovat všechny prvky původního pole, začínající na
pozici start
a končící na pozici menší o length
prvků od konce pole. Pokud tento parametr
nezadáte, posloupnost bude obsahovat všechny prvky původního pole, začínající pozicí start
.
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.
sort (?Closure $comparison, string|int|\Closure|null $by=null, string|int|\Closure|bool $byKey=false)
Filtr sort
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í specifikována vlastní
porovnávací funkce.
Pro řazení pole v opačném pořadí:
Můžete specifikovat vlastní porovnávací funkci pro řazení (příklad ukazuje, jak obrátit řazení od největší po nejmenší):
Filtr |sort
také umožňuje řadit prvky podle klíčů:
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
objekt nebo pole:
Můžete také definovat callback funkci, která určí hodnotu, podle které se má řadit:
Stejným způsobem lze využít i parametr byKey
.
spaceless
Filtr spaceless
odstraní nadbytečné bílé znaky z výstupu. Můžete také použít alias
strip
.
Výstup:
stripHtml
Filtr stripHtml
převádí HTML na čistý text. Odstraní HTML značky a převede HTML entity na jejich textovou
reprezentaci.
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 $offset, ?int $length=null)
Filtr substr
extrahuje část řetězce. Tento filtr byl nahrazen filtrem slice.
translate (…$args)
Filtr translate
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.
trim (string
$charlist=" \t\n\r\0\x0B\u{A0}"
)
Filtr trim
odstraní bílé znaky (nebo jiné zadané znaky) od začátku a konce řetězce.
truncate (int $length, string
$append='…'
)
Filtr truncate
zkrátí ř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á nakonec trojtečku (lze změnit druhým parametrem).
upper
Filtr upper
převede řetězec na velká písmena. Vyžaduje PHP rozšíření mbstring
.
Viz také capitalize, firstUpper, lower.
webalize
Filtr webalize
upraví UTF-8 řetězec do tvaru používaného v URL.
Převádí znaky na ASCII ekvivalenty. Převádí mezery na pomlčky. Odstraní znaky, které nejsou alfanumerické, podtržítka ani pomlčky. Převádí text na malá písmena. Také odstraní úvodní a koncové bílé znaky.
Vyžaduje knihovnu nette/utils.