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.

Přehled filtrů, které jsou standardně k dispozici:

Modifikace řetězců
truncate (length, append = '…') zkrátí délku se zachováním slov
substr (offset [, length]) vrátí část řetězce
trim (charset = mezery) odstraní počáteční a koncové mezery či jiné znaky
striptags odstraní HTML značky
strip odstraní bílé místo
indent (level = 1, char = "\t") odsadí text zleva o daný počet tabulátorů
replace (search, replace = '') zamění výskyty hledaného řetězce
replaceRE (pattern, replace = '') zamění výskyty dle regulárního výrazu
padLeft (length, pad = ' ') doplní řetězec zleva na požadovanou délku
padRight (length, pad = ' ') doplní řetězec zprava na požadovanou délku
repeat (count) opakování řetězce
implode (glue = '') spojí pole do řetězce
webalize upraví UTF-8 řetězec do tvaru používaného v URL
breaklines Před konce řádku přidá HTML odřádkování
Velikost písmen
lower převede na malá písmenka
upper převede na velká písmenka
firstUpper převede první písmenko na velké
capitalize malá písmena, první písmeno ve slovech velké
Formátování hodnot
date (format) formátuje datum
number (decimals = 0, decPoint = '.') formátuje číslo
bytes (precision = 2) formátuje velikost v bajtech
Ostatní
noescape vypíše proměnnou bez escapování
dataStream (mimetype = detect) konverze pro Data URI protokol
escapeurl escapuje parametr v URL
checkurl ošetří url adresu od nebezpečných vstupů
nocheck předejde automatickému použití filtru checkurl
length vrací délku řetězce ve znacích
reverse obrátí UTF-8 řetězec nebo pole

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) do tzv. modifikátoru:

<h1>{$heading|upper}</h1>

Filtry (ve starších verzích helpery) lze zřetězit a poté se aplikují v pořadí od levého k pravému:

<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)}</h1>

Jako filtr lze do šablony zaregistrovat libovolný callback:

$latte = new Latte\Engine;
$latte->addFilter('shortify', function ($s, $len = 10) {
    return mb_substr($s, 0, $len);
});

V šabloně se potom volá takto:

<p>{$text|shortify}</p>
<p>{$text|shortify:100}</p>

Truncate

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á nakonec trojtečku (lze změnit druhým parametrem).

{var $title = 'Řekněte, jak se máte?'}
{$title|truncate:5} Řekn…
{$title|truncate:20} Řekněte, jak se…
{$title|truncate:30} Řekněte, jak se máte?

Strip

Odstraní zbytečné bílé místo (mezery) z výstupu.

{block |strip}
    <ul>
        <li>Hello</li>
    </ul>
{/block}

Vygeneruje

<ul> <li>Hello</li> </ul>

Indent

Odsadí text zleva o daný počet tabulátorů nebo jiných znaků, které můžeme uvést ve druhém argumentu:

<div>
{block |indent}
<p>Hello</p>
{/block}
</div>

Vygeneruje

<div>
    <p>Hello</p>
</div>

Webalize

Filtr odstraní diakritiku a všechny znaky kromě písmen anglické abecedy a číslic nahradí spojovníkem. Vyžaduje instalaci nette/utils.

{var $s = 'Náš 10. produkt'}
{$s|webalize} nas-10-produkt

Odřádkování

Přidává před každý znak nového řádku HTML značku <br>. Vstupní text je automaticky escapován.

{var $s = "Text & with \n newline"}
{$s|breaklines} "Text &amp; with <br>\n newline"

Velikost písmen

{var $s = 'dobrý DEN'}
{$s|lower} dobrý den
{$s|upper} DOBRÝ DEN
{$s|firstUpper} Dobrý DEN
{$s|capitalize} Dobrý Den

Date

Formátuje datum podle masky buď ve tvaru používaném PHP funkcí strftime nebo date. Filtr přijímá datum buď ve formátu UNIX timestamp, v podobě řetězce nebo jako objekt DateTime.

{$today|date:'%d.%m.%Y'}
{$today|date:'j. n. Y'}

Number

Formátuje číslo na určitý počet desetinných míst. Lze určit znak pro desetinnou čárku a oddělovač 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

Bytes

Formátuje velikost v bajtech do lidsky čitelné podoby.

{$size|bytes} 0 B, 10 B nebo 1.25 GB, …

DataStream

Konvertuje do data URI scheme. Pomocí něj lze do HTML nebo CSS vkládat obrázky bez nutnosti linkovat externí soubory. Podporují jej všechny moderní prohlížeče. Vyžaduje PHP rozšíření fileinfo.

Mějme v proměnné obrázek $img = Image::fromFile('obrazek.gif'), poté

<img src="{$img|dataStream}">

Vygeneruje například:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==">

EscapeUrl

Escapuje proměnnou pro použítí jakožto parametru v URL.

<a href="http://example.com/{$name|escapeurl}">{$name}</a>

Reverse

{var $s = 'Nette'}
{$s|reverse} etteN
{var $a = ['N', 'e', 't', 't', 'e']}
{$a|reverse} ['e', 't', 't', 'e', 'N']