Filtry Latte

W szablonach możemy używać funkcji, które pomagają modyfikować lub przeformatowywać dane do ostatecznej postaci. Nazywamy je filtrami.

Przekształcanie
batch wypisywanie danych liniowych w tabeli
breakLines wstawia znaczniki HTML przed każdym znakiem nowego wiersza
bytes formatuje rozmiar w bajtach
clamp ogranicza wartość do zadanego zakresu
column wyciąga z tablicy pojedynczą kolumnę
commas łączy tablicę przecinkami
limit ogranicza długość tablicy, łańcucha albo iteratora
dataStream konwersja na protokół Data URI
date formatuje datę i czas
explode dzieli łańcuch na tablicę według separatora
filter filtruje elementy iterowalne według predykatu
first zwraca pierwszy element tablicy lub znak łańcucha
group grupuje dane według różnych kryteriów
implode łączy tablicę w łańcuch
indent wcina tekst od lewej o zadaną liczbę tabulatorów
join łączy tablicę w łańcuch
last zwraca ostatni element tablicy lub znak łańcucha
length zwraca długość łańcucha lub tablicy
localDate formatuje datę i czas zgodnie z locale
map stosuje callback do każdego elementu
number formatuje liczbę
padLeft dopełnia łańcuch do określonej długości od lewej
padRight dopełnia łańcuch do określonej długości od prawej
random zwraca losowy element tablicy lub znak łańcucha
repeat powtarza łańcuch
replace zastępuje wystąpienia szukanego łańcucha
replaceRE zastępuje wystąpienia według wyrażenia regularnego
reverse odwraca łańcuch UTF‑8 albo tablicę
slice wycina fragment tablicy lub łańcucha
sort sortuje tablicę
spaceless usuwa białe znaki, podobnie jak tag spaceless
split dzieli łańcuch na tablicę według separatora
strip usuwa białe znaki, przestarzały alias dla spaceless
stripHtml usuwa tagi HTML i zamienia encje HTML na znaki
substr zwraca część łańcucha
trim usuwa początkowe i końcowe białe lub inne znaki
translate tłumaczenie na inne języki
truncate skraca długość, zachowując całe słowa
webalize dostosowuje łańcuch UTF‑8 do postaci używanej w URL
Wielkość liter
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
Zaokrąglanie
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
Atrybuty HTML
accept akceptuje nowe zachowanie smart atrybutów
toggle przełącza obecność atrybutu HTML
Escapowanie
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ć.

Bezpieczeństwo
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 &amp; 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 *}

Zobacz też floor, round.

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' *}

Zobacz też last, random.

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 *}

Zobacz też ceil, round.

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' *}

Zobacz też commas, explode.

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' *}

Zobacz też first, random.

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 / MMMMMMM 8 / 08 / AugAugust
Dzień d / dd / EEEEE 1 / 01 / SunSunday
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: &lt;b&gt;hello&lt;/b&gt;
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:

  • 0 cyfra 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&amp;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' *}

Zobacz też first, last.

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 *}

Zobacz też ceil, floor.

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 &lt; two</p>'|stripHtml}  {* wypisze 'one < two' *}

Powstały zwykły tekst może naturalnie zawierać znaki reprezentujące tagi HTML, na przykład '&lt;p&gt;'|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.

wersja: 3.x