Filtry Latte
W szablonach możemy używać funkcji, które pomagają modyfikować lub przeformatowywać dane do ostatecznej postaci. Nazywamy je filtrami.
capitalize |
małe litery, pierwsza litera każdego słowa wielka |
firstLower |
zamienia pierwszą literę na małą |
firstUpper |
zamienia pierwszą literę na wielką |
lower |
zamienia na małe litery |
upper |
zamienia na wielkie litery |
ceil |
zaokrągla liczbę w górę do zadanej precyzji |
floor |
zaokrągla liczbę w dół do zadanej precyzji |
round |
zaokrągla liczbę do zadanej precyzji |
accept |
akceptuje nowe zachowanie smart atrybutów |
toggle |
przełącza obecność atrybutu HTML |
escapeUrl |
escapuje parametr w URL |
noescape |
wypisuje zmienną bez escapowania |
query |
generuje query string w URL |
Istnieją też filtry escapujące dla HTML (escapeHtml i escapeHtmlComment), XML
(escapeXml), JavaScriptu (escapeJs), CSS (escapeCss) i iCalendar
(escapeICal), których Latte używa samo dzięki escapowaniu świadomemu kontekstu i nie
musisz ich pisać.
checkUrl |
oczyszcza adres URL z niebezpiecznych danych |
nocheck |
zapobiega automatycznemu oczyszczaniu URL |
Latte automatycznie sprawdza atrybuty
src i href, więc filtra checkUrl prawie nie musisz używać.
Wszystkie wbudowane filtry są przeznaczone dla łańcuchów w kodowaniu UTF‑8.
Użycie
Filtry zapisuje się po znaku potoku (spacja przed nim jest dozwolona):
<h1>{$heading|upper}</h1>
Filtry można łączyć w łańcuch, a stosowane są kolejno od lewej do prawej:
<h1>{$heading|lower|capitalize}</h1>
Parametry podaje się po nazwie filtra, oddzielone dwukropkami albo przecinkami:
<h1>{$heading|truncate:20,''}</h1>
Filtry można stosować również do wyrażenia:
{var $name = ($title|upper) . ($subtitle|lower)}
Własne filtry można rejestrować w ten sposób:
$latte = new Latte\Engine;
$latte->addFilter('shortify', fn(string $s, int $len = 10) => mb_substr($s, 0, $len));
W szablonie wywołuje się je potem tak:
<p>{$text|shortify}</p>
<p>{$text|shortify:100}</p>
Filtry nullsafe
Dowolny filtr można uczynić nullsafe, używając ?| zamiast |. Jeśli wartość to
null, filtr nie zostanie wykonany i zwrócone zostanie null. Pomijane są też kolejne filtry w
łańcuchu.
Przydaje się to w połączeniu z atrybutami HTML, które są pomijane, gdy wartość to null.
<div title={$title?|upper}>
{* jeśli $title jest null: <div> *}
{* jeśli $title to 'hello': <div title="HELLO"> *}
Filtry
accept
Filtr używany podczas migracji z Latte 3.0 do potwierdzenia, że przejrzałeś zmianę zachowania atrybutu i ją akceptujesz. Nie modyfikuje wartości.
To narzędzie tymczasowe. Po zakończeniu migracji i wyłączeniu ostrzeżeń migracyjnych powinieneś usunąć ten filtr z szablonów.
batch (int $length, mixed $rest=null): Generator
Filtr, który upraszcza wypisywanie danych liniowych w postaci tabeli. Zwraca generator tablic o podanej liczbie elementów. Jeśli podasz drugi parametr, zostanie użyty do uzupełnienia brakujących elementów w ostatnim wierszu.
{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>
Wypisze:
<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>
Zobacz też group i tag iterateWhile.
breakLines
Wstawia znacznik HTML <br> przed każdym znakiem nowego wiersza.
{var $s = "Text & with \n newline"}
{$s|breakLines} {* wypisze "Text & with <br>\n newline" *}
bytes (int $precision=2)
Formatuje rozmiar w bajtach do postaci czytelnej dla człowieka. Jeśli ustawiono locale, używane są odpowiednie separatory dziesiętne i tysięcy.
{$size|bytes} {* 0 B, 1.25 GB, … *}
{$size|bytes:0} {* 10 B, 1 GB, … *}
ceil (int $precision=0)
Zaokrągla liczbę w górę do zadanej precyzji.
{=3.4|ceil} {* wypisze 4 *}
{=135.22|ceil:1} {* wypisze 135.3 *}
{=135.22|ceil:3} {* wypisze 135.22 *}
capitalize
Słowa będą zaczynać się wielką literą, wszystkie pozostałe znaki będą małe. Wymaga rozszerzenia PHP
mbstring.
{='i like LATTE'|capitalize} {* wypisze 'I Like Latte' *}
Zobacz też firstLower, firstUpper, lower, upper.
checkUrl
Wymusza oczyszczenie adresu URL. Sprawdza, czy URL używa bezpiecznego schematu (http, https,
ftp, mailto, tel, sms) albo jest odnośnikiem względnym, i blokuje
niebezpieczne schematy, takie jak javascript:, które mogłyby stanowić zagrożenie.
{var $link = 'javascript:window.close()'}
<a data-href={$link|checkUrl}>checked</a>
<a data-href={$link}>unchecked</a>
Wypisze:
<a data-href="">checked</a>
<a data-href="javascript:window.close()">unchecked</a>
Zobacz też nocheck.
clamp (int|float $min, int|float $max)
Ogranicza wartość do podanego zakresu domkniętego między min a max.
{$level|clamp: 0, 255}
Istnieje też jako funkcja.
column (string|int|null $columnKey, string|int|null $indexKey=null)
Zwraca wartości pojedynczej kolumny $columnKey z tablicy wielowymiarowej jako nową tablicę. Można go użyć
także na tablicach obiektów, aby wydobyć wartości właściwości.
{var $users = [
[id: 30, name: 'John', age: 30],
[id: 32, name: 'Jane', age: 25],
[id: 33, age: 35],
]}
{$users|column: 'name'}
{* zwróci ['John', 'Jane'] *}
{$users|column: 'name', 'id'}
{* zwróci [30 => 'John', 32 => 'Jane'] *}
Jeśli jako klucz kolumny podasz null, tablica zostanie przeindeksowana według $indexKey.
commas (?string $lastGlue=null)
Łączy elementy tablicy przecinkiem ze spacją (', '). Wygodny skrót do wypisywania elementów w postaci
czytelnej dla człowieka.
{var $items = ['apples', 'oranges', 'bananas']}
{$items|commas}
{* wypisze 'apples, oranges, bananas' *}
Możesz też podać własny separator dla ostatniej pary elementów:
{$items|commas: ' and '}
{* wypisze 'apples, oranges and bananas' *}
{=['PHP', 'JavaScript', 'Python']|commas: ', or '}
{* wypisze 'PHP, JavaScript, or Python' *}
Zobacz też implode.
dataStream (?string $type=null)
Konwertuje treść na schemat data URI. Pozwala to osadzać obrazki w HTML albo CSS bez konieczności linkowania zewnętrznych
plików. Jeśli $type to null, typ MIME wykrywany jest automatycznie.
Miejmy obrazek w zmiennej $img = Image::fromFile('image.gif'), wtedy
<img src={$img|dataStream}>
Wypisze na przykład:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==">
Wymaga rozszerzenia PHP fileinfo.
date (string $format='j. n. Y')
Formatuje datę i czas według maski używanej przez funkcję PHP date. Filtr przyjmuje
datę jako uniksowy timestamp, łańcuch albo obiekt DateTimeInterface czy DateInterval.
{$today|date:'j. n. Y'}
Zobacz też localDate.
escapeUrl
Escapuje zmienną do użycia jako parametr w URL.
<a href="http://example.com/{$name|escapeUrl}">{$name}</a>
Zobacz też query.
explode (string
$separator='')
Dzieli łańcuch na tablicę według separatora. Alias dla split.
{='one,two,three'|explode:','} {* zwróci ['one', 'two', 'three'] *}
Jeśli separatorem jest pusty łańcuch (wartość domyślna), wejście zostanie podzielone na poszczególne znaki:
{='123'|explode} {* zwróci ['1', '2', '3'] *}
Możesz użyć też aliasu split:
{='1,2,3'|split:','} {* zwróci ['1', '2', '3'] *}
Zobacz też implode.
filter (callable $predicate): iterable
Filtruje elementy tablicy albo iteratora, zachowując tylko te, dla których predykat zwraca true. Klucze są
zachowywane.
{foreach ($people|filter: fn($person) => $person->age >= 18) as $adult}
<p>{$adult->name}</p>
{/foreach}
first
Zwraca pierwszy element tablicy albo pierwszy znak łańcucha:
{=[1, 2, 3, 4]|first} {* wypisze 1 *}
{='abcd'|first} {* wypisze 'a' *}
floor (int $precision=0)
Zaokrągla liczbę w dół do zadanej precyzji.
{=3.5|floor} {* wypisze 3 *}
{=135.79|floor:1} {* wypisze 135.7 *}
{=135.79|floor:3} {* wypisze 135.79 *}
firstLower
Zamienia pierwszą literę na małą. Wymaga rozszerzenia PHP mbstring.
{='The Latte'|firstLower} {* wypisze 'the Latte' *}
Zobacz też capitalize, firstUpper, lower, upper.
firstUpper
Zamienia pierwszą literę na wielką. Wymaga rozszerzenia PHP mbstring.
{='the latte'|firstUpper} {* wypisze 'The latte' *}
Zobacz też capitalize, firstLower, lower, upper.
group (string|int|\Closure $by): iterable
Filtr grupuje dane według różnych kryteriów.
W tym przykładzie wiersze tabeli są grupowane według kolumny categoryId. Wynikiem jest iterowalna struktura
grup, w której kluczem jest wartość z kolumny categoryId. Przeczytaj szczegółowy przewodnik.
{foreach ($items|group: categoryId) as $categoryId => $categoryItems}
<ul>
{foreach $categoryItems as $item}
<li>{$item->name}</li>
{/foreach}
</ul>
{/foreach}
Zobacz też batch, funkcję group i tag iterateWhile.
implode (string $glue='')
Zwraca łańcuch powstały ze sklejenia elementów sekwencji. Alias dla join.
{=[1, 2, 3]|implode} {* wypisze '123' *}
{=[1, 2, 3]|implode:'|'} {* wypisze '1|2|3' *}
Możesz użyć też aliasu join:
{=[1, 2, 3]|join} {* wypisze '123' *}
indent (int $level=1, string
$chars="\t")
Wcina tekst od lewej o zadaną liczbę tabulatorów albo innych znaków podanych w drugim argumencie. Puste wiersze nie są wcinane.
<div>
{block |indent}
<p>Hello</p>
{/block}
</div>
Wypisze:
<div>
<p>Hello</p>
</div>
last
Zwraca ostatni element tablicy albo ostatni znak łańcucha:
{=[1, 2, 3, 4]|last} {* wypisze 4 *}
{='abcd'|last} {* wypisze 'd' *}
length
Zwraca długość łańcucha albo tablicy.
- dla łańcuchów zwraca długość w znakach UTF‑8
- dla tablic zwraca liczbę elementów
- dla obiektów implementujących interfejs Countable używa wartości zwracanej przez metodę
count() - dla obiektów implementujących interfejs Traversable używa wartości zwracanej przez
funkcję
iterator_count()
{if ($users|length) > 10}
...
{/if}
localDate (?string $format=null, ?string $date=null, ?string $time=null)
Formatuje datę i czas zgodnie z locale, zapewniając spójne
i zlokalizowane wyświetlanie danych czasowych w różnych językach i regionach. Filtr przyjmuje datę jako uniksowy timestamp,
łańcuch albo obiekt DateTimeInterface.
{$date|localDate} {* 15. dubna 2024 *}
{$date|localDate: format: yM} {* 4/2024 *}
{$date|localDate: date: medium} {* 15. 4. 2024 *}
Jeśli użyjesz filtra bez parametrów, wypisze datę na poziomie long, zobacz niżej.
a) Użycie format
Parametr format opisuje, które składniki czasu mają być wyświetlone. Używa kodów literowych, w których
liczba powtórzeń wpływa na szerokość wyniku:
| Rok | y / yy / yyyy |
2024 / 24 / 2024 |
| Miesiąc | M / MM / MMM / MMMM |
8 / 08 / Aug / August |
| Dzień | d / dd / E / EEEE |
1 / 01 / Sun / Sunday |
| Godzina | j / H / h |
preferowana / 24-godzinna / 12-godzinna |
| Minuta | m / mm |
5 / 05 (2 cyfry w połączeniu z sekundami) |
| Sekunda | s / ss |
8 / 08 (2 cyfry w połączeniu z minutami) |
Kolejność kodów w formacie nie ma znaczenia, bo kolejność składników zostanie wyświetlona zgodnie z konwencjami danego
locale. Format jest więc niezależny od locale. Na przykład format yyyyMMMMd w locale en_US wypisze
April 15, 2024, a w locale cs_CZ wypisze 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) Użycie gotowych stylów
Parametry date i time określają, jak szczegółowo mają być wyświetlone data i czas. Możesz
wybierać spośród kilku poziomów: full, long, medium, short. Możesz
wyświetlić samą datę, sam czas albo oba:
| 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 |
Dla daty możesz użyć również prefiksu relative- (np. relative-short), który dla dat bliskich
teraźniejszości wyświetli wczoraj, dziś albo jutro, a poza tym wypisze datę w
standardowy sposób.
{$date|localDate: date: relative-short} {* wczoraj *}
Zobacz też date.
lower
Zamienia łańcuch na małe litery. Wymaga rozszerzenia PHP mbstring.
{='LATTE'|lower} {* wypisze 'latte' *}
Zobacz też capitalize, firstLower, firstUpper, upper.
map (callable $transformer): iterable
Przekształca każdy element tablicy albo iteratora za pomocą callbacku i zwraca nowy iterator. To odpowiednik filtra filter. Klucze są zachowywane.
{=($users|map: fn($user) => $user->name)|implode: ', '} {* John, Mary, Paul *}
Zobacz też filter.
nocheck
Zapobiega automatycznemu oczyszczaniu URL. Latte automatycznie sprawdza, czy URL używa bezpiecznego
schematu (jak http, https, ftp, mailto, tel, sms)
albo jest odnośnikiem względnym, i blokuje potencjalnie niebezpieczne.
Jeśli odnośnik używa innego schematu, na przykład javascript: czy data:, a masz pewność co do
jego treści, możesz wyłączyć kontrolę przez |nocheck.
{var $link = 'javascript:window.close()'}
<a href={$link}>checked</a>
<a href={$link|nocheck}>unchecked</a>
Wypisze:
<a href="">checked</a>
<a href="javascript:window.close()">unchecked</a>
Zobacz też checkUrl.
noescape
Wyłącza automatyczne escapowanie.
{var $trustedHtmlString = '<b>hello</b>'}
Escaped: {$trustedHtmlString}
Unescaped: {$trustedHtmlString|noescape}
Wypisze:
Escaped: <b>hello</b>
Unescaped: <b>hello</b>
Niewłaściwe użycie filtra noescape może prowadzić do podatności XSS! Nigdy go nie używaj,
o ile nie masz absolutnej pewności, co robisz i że wypisywany łańcuch pochodzi z zaufanego źródła.
number (int $decimals=0, string
$decPoint='.', string $thousandsSep=',')
Formatuje liczbę do podanej liczby miejsc dziesiętnych. Jeśli ustawiono locale, używane są odpowiednie separatory dziesiętne i tysięcy.
{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 pozwala określić wygląd liczb dokładnie według Twoich potrzeb. Wymaga to ustawionego locale. Format składa się z kilku znaków specjalnych, których pełny
opis znajdziesz w dokumentacji DecimalFormat:
0cyfra obowiązkowa, wyświetlana zawsze, nawet jeśli jest zerem#cyfra opcjonalna, wyświetlana tylko wtedy, gdy liczba faktycznie ma w tym miejscu cyfrę@cyfra znacząca, pomaga wyświetlić liczbę z określoną liczbą cyfr znaczących.wskazuje, gdzie ma być separator dziesiętny (kropka albo przecinek, zależnie od kraju),służy do oddzielania grup cyfr, najczęściej tysięcy%mnoży liczbę przez 100 i dodaje znak procenta
Spójrzmy na kilka przykładów. W pierwszym dwa miejsca dziesiętne są obowiązkowe, w drugim opcjonalne. Trzeci przykład pokazuje dopełnianie zerami od lewej i od prawej, czwarty wypisuje tylko istniejące cyfry:
{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 *}
Cyfry znaczące określają, ile cyfr, niezależnie od przecinka dziesiętnego, ma być wyświetlonych, z ewentualnym zaokrągleniem:
{1234|number: '@@'} {* 1200 *}
{1234|number: '@@@'} {* 1230 *}
{1234|number: '@@@#'} {* 1234 *}
{1.2345|number: '@@@'} {* 1.23 *}
{0.00123|number: '@@'} {* 0.0012 *}
Prosty sposób na wyświetlenie liczby jako procentu. Liczba jest mnożona przez 100 i dodawany jest znak %:
{0.1234|number: '#.##%'} {* 12.34% *}
Możemy zdefiniować inny format dla liczb dodatnich i ujemnych, oddzielając je znakiem ;. W ten sposób można
na przykład wyświetlać liczby dodatnie ze znakiem +:
{42|number: '#.##;(#.##)'} {* 42 *}
{-42|number: '#.##;(#.##)'} {* (42) *}
{42|number: '+#.##;-#.##'} {* +42 *}
{-42|number: '+#.##;-#.##'} {* -42 *}
Pamiętaj, że faktyczny wygląd liczb może różnić się w zależności od ustawień kraju. Na przykład w niektórych krajach jako separatora dziesiętnego używa się przecinka zamiast kropki. Filtr uwzględnia to automatycznie, więc nie musisz się tym przejmować.
padLeft (int $length, string
$append=' ')
Dopełnia łańcuch albo liczbę do określonej długości innym łańcuchem od lewej.
{='hello'|padLeft: 10, '123'} {* wypisze '12312hello' *}
{=123|padLeft: 5, '0'} {* wypisze '00123' *}
padRight (int $length, string
$append=' ')
Dopełnia łańcuch albo liczbę do określonej długości innym łańcuchem od prawej.
{='hello'|padRight: 10, '123'} {* wypisze 'hello12312' *}
{=123|padRight: 5, '0'} {* wypisze '12300' *}
query
Dynamicznie generuje query string w URL:
<a href="http://example.com/?{[name: 'John Doe', age: 43]|query}">click</a>
<a href="http://example.com/?search={$search|query}">search</a>
Wypisze:
<a href="http://example.com/?name=John+Doe&age=43">click</a>
<a href="http://example.com/?search=Foo+Bar">search</a>
Klucze o wartości null są pomijane.
Zobacz też escapeUrl.
random
Zwraca losowy element tablicy albo losowy znak łańcucha:
{=[1, 2, 3, 4]|random} {* wypisze np.: 3 *}
{='abcd'|random} {* wypisze np.: 'b' *}
repeat (int $count)
Powtarza łańcuch x razy.
{='hello'|repeat: 3} {* wypisze 'hellohellohello' *}
replace (string|array $search, string|array
$replace='')
Zastępuje wszystkie wystąpienia szukanego łańcucha łańcuchem zastępującym.
{='hello world'|replace: 'world', 'friend'} {* wypisze 'hello friend' *}
Można wykonać kilka zamian naraz:
{='hello world'|replace: [h => l, l => h]} {* wypisze 'lehho worhd' *}
replaceRE (string $pattern, string
$replacement='')
Wykonuje wyszukiwanie i zamianę według wyrażenia regularnego.
{='hello world'|replaceRE: '/l.*/', 'l'} {* wypisze 'hel' *}
reverse (bool $preserveKeys=false)
Odwraca podany łańcuch albo tablicę.
{var $s = 'Nette'}
{$s|reverse} {* wypisze 'etteN' *}
{var $a = ['N', 'e', 't', 't', 'e']}
{$a|reverse} {* zwróci ['e', 't', 't', 'e', 'N'] *}
round (int $precision=0)
Zaokrągla liczbę do zadanej precyzji.
{=3.4|round} {* wypisze 3 *}
{=3.5|round} {* wypisze 4 *}
{=135.79|round:1} {* wypisze 135.8 *}
{=135.79|round:3} {* wypisze 135.79 *}
slice (int $start, ?int $length=null, bool $preserveKeys=false)
Wycina fragment tablicy, łańcucha albo iteratora.
{='hello'|slice: 1, 2} {* wypisze 'el' *}
{=['a', 'b', 'c']|slice: 1, 2} {* wypisze ['b', 'c'] *}
Filtr działa jak funkcja PHP array_slice dla tablic albo mb_substr dla łańcuchów. Dla iteratorów
zwraca generator: elementy pobierane są ze źródła po jednym, a odczyt kończy się po osiągnięciu limitu. Cały iterator
nigdy nie jest wczytywany do pamięci.
Jeśli start jest nieujemny, sekwencja zacznie się od tego przesunięcia od początku tablicy/łańcucha. Jeśli
start jest ujemny, sekwencja zacznie się o tyle elementów od końca.
Jeśli podano length i jest dodatnie, sekwencja będzie miała co najwyżej tyle elementów. Jeśli wejście jest
krótsze niż length, znajdą się w niej tylko dostępne elementy. Jeśli podano length i jest ujemne,
sekwencja zakończy się o tyle elementów przed końcem wejścia. Jeśli zostanie pominięte, sekwencja obejmie wszystko od
start do końca wejścia.
Domyślnie filtr przenumerowuje i resetuje całkowitoliczbowe klucze tablicy. To zachowanie można zmienić, ustawiając
preserveKeys na true. Klucze łańcuchowe są zachowywane zawsze, niezależnie od tego parametru.
Zobacz też limit.
limit (int $length)
Ogranicza długość tablicy, łańcucha albo iteratora. Dla tablic i iteratorów klucze są zachowywane. Dla łańcuchów 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 sortuje elementy tablicy albo iteratora i zachowuje ich klucze asocjacyjne. Gdy ustawiono locale, sortowanie odbywa się według jego reguł, o ile nie podano własnej funkcji porównującej.
{foreach ($names|sort) as $name}
...
{/foreach}
Tablica posortowana w odwrotnej kolejności:
{foreach ($names|sort|reverse) as $name}
...
{/foreach}
Do sortowania możesz podać własną funkcję porównującą (przykład pokazuje, jak odwrócić sortowanie od największego do najmniejszego):
{var $reverted = ($names|sort: fn($a, $b) => $b <=> $a)}
Filtr |sort pozwala też sortować elementy według kluczy:
{foreach ($names|sort: byKey: true) as $name}
...
{/foreach}
Jeśli potrzebujesz posortować tabelę według konkretnej kolumny, możesz użyć parametru by. Wartość
'name' w przykładzie określa, że sortowanie odbędzie się według $item->name albo
$item['name'], w zależności od tego, czy $item jest tablicą, czy obiektem:
{foreach ($items|sort: by: 'name') as $item}
{$item->name}
{/foreach}
Możesz też zdefiniować funkcję callback, która ustala wartość do sortowania:
{foreach ($items|sort: by: fn($item) => $item->category->name) as $item}
{$item->name}
{/foreach}
Parametru byKey można używać w ten sam sposób.
spaceless
Usuwa z wyniku zbędne białe znaki. Możesz użyć też przestarzałego aliasu strip, ale preferowane jest
spaceless.
{block |spaceless}
<ul>
<li>Hello</li>
</ul>
{/block}
Wypisze:
<ul><li>Hello</li></ul>
stripHtml
Konwertuje HTML na zwykły tekst. Czyli usuwa tagi HTML i zamienia encje HTML na znaki tekstowe.
{='<p>one < two</p>'|stripHtml} {* wypisze 'one < two' *}
Powstały zwykły tekst może naturalnie zawierać znaki reprezentujące tagi HTML, na przykład
'<p>'|stripHtml zamienia się w <p>. Nigdy nie wypisuj powstałego tekstu przez
|noescape, bo może to prowadzić do podatności bezpieczeństwa.
substr (int $start, ?int $length=null)
Wycina część łańcucha. Ten filtr został zastąpiony filtrem slice.
{$string|substr: 1, 2}
toggle
Filtr toggle steruje obecnością atrybutu na podstawie wartości logicznej. Jeśli wartość jest prawdziwa,
atrybut jest obecny; jeśli fałszywa, atrybut jest całkowicie pomijany:
<div uk-grid={$isGrid|toggle}>
{* jeśli $isGrid jest prawdziwe: <div uk-grid> *}
{* jeśli $isGrid jest fałszywe: <div> *}
Filtr przydaje się przy własnych atrybutach albo atrybutach bibliotek JavaScriptu, które wymagają sterowania obecnością i nieobecnością, podobnie jak logiczne atrybuty HTML.
Filtra można używać wyłącznie wewnątrz atrybutów HTML.
translate (…$args)
Tłumaczy wyrażenia na inne języki. Aby filtr był dostępny, trzeba skonfigurować translator. Możesz też użyć tagów do tłumaczenia.
<a href="basket">{='Koszyk'|translate}</a>
<span>{$item|translate}</span>
trim (string
$charlist=" \t\n\r\0\x0B\u{A0}")
Usuwa białe znaki (albo inne znaki) z początku i końca łańcucha.
{=' I like Latte. '|trim} {* wypisze 'I like Latte.' *}
{=' I like Latte.'|trim: '.'} {* wypisze ' I like Latte' *}
truncate (int $length, string
$append='…')
Skraca łańcuch do podanej maksymalnej długości, starając się zachować całe słowa. Jeśli łańcuch zostanie skrócony, dodaje na końcu wielokropek (można to zmienić drugim 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
Zamienia łańcuch na wielkie litery. Wymaga rozszerzenia PHP mbstring.
{='latte'|upper} {* wypisze 'LATTE' *}
Zobacz też capitalize, firstLower, firstUpper, lower.
webalize
Dostosowuje łańcuch UTF‑8 do postaci używanej w URL.
Konwertuje na ASCII. Zamienia spacje na myślniki. Usuwa znaki, które nie są alfanumeryczne, podkreśleniami ani myślnikami. Zamienia na małe litery. Usuwa też początkowe i końcowe białe znaki.
{var $s = 'Our 10th product'}
{$s|webalize} {* wypisze 'our-10th-product' *}
Wymaga biblioteki nette/utils.