Filtri za latte
Filtri so funkcije, ki spremenijo ali oblikujejo podatke v želeno obliko. To je povzetek vgrajenih filtrov, ki so na voljo.
capitalize |
male črke, prva črka vsake besede velika črka |
firstUpper |
prva črka je velika |
lower |
niz postane mala črka |
upper |
spremeni niz v velike črke |
ceil |
zaokroži število do določene natančnosti |
floor |
zaokroži število navzdol na določeno natančnost |
round |
zaokroži število na določeno natančnost |
escapeUrl |
pobegne parameter v naslovu URL |
noescape |
natisne spremenljivko brez umika |
query |
ustvari poizvedbeni niz v naslovu URL |
Na voljo so tudi filtri za eskapiranje za HTML (escapeHtml
in escapeHtmlComment
), XML
(escapeXml
), JavaScript (escapeJs
), CSS (escapeCss
) in iCalendar (escapeICal
),
ki jih Latte uporablja sam zaradi kontekstnega
eskapiranja in vam jih ni treba pisati.
checkUrl |
odpravi niz za uporabo znotraj atributa href |
nocheck |
preprečuje samodejno čiščenje URL |
Latte atributa src
in href
preverja samodejno, zato vam skoraj ni treba uporabljati
filtra checkUrl
.
Vsi vgrajeni filtri delujejo z nizi, kodiranimi v UTF-8.
Uporaba
Latte omogoča klicanje filtrov z uporabo zapisa z znakom pipe (pred njim je dovoljen presledek):
<h1>{$heading|upper}</h1>
Filtri se lahko verižijo, v tem primeru se uporabljajo po vrstnem redu od leve proti desni:
<h1>{$heading|lower|capitalize}</h1>
Parametri so navedeni za imenom filtra, ločeni z dvopičjem ali vejico:
<h1>{$heading|truncate:20,''}</h1>
Filtre je mogoče uporabiti na izrazu:
{var $name = ($title|upper) . ($subtitle|lower)}</h1>
Filtre po meri je mogoče registrirati na ta način:
$latte = new Latte\Engine;
$latte->addFilter('shortify', fn(string $s, int $len = 10) => mb_substr($s, 0, $len));
Uporabimo ga v predlogi, kot je ta:
<p>{$text|shortify}</p>
<p>{$text|shortify:100}</p>
Filtri
batch (int $length, mixed $item): array
Filter, ki poenostavi navajanje linearnih podatkov v obliki tabele. Vrne polje z danim številom elementov. Če navedete drugi parameter, se ta uporabi za dopolnitev manjkajočih elementov v zadnji vrstici.
{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>
Izpisuje:
<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>
Oglejte si tudi oznako group in iterateWhile.
breakLines
Pred vse nove vrstice vstavi prelome vrstic HTML.
{var $s = "Text & with \n newline"}
{$s|breakLines} {* outputs "Text & with <br>\n newline" *}
bytes (int $precision=2)
Oblikuje velikost v bajtih v človeku razumljivo obliko. Če je nastavljen lokalni jezik, se uporabijo ustrezna decimalna ločila in ločila v tisočih.
{$size|bytes} 0 B, 1.25 GB, …
{$size|bytes:0} 10 B, 1 GB, …
ceil (int $precision=0)
Zaokroži število do določene natančnosti.
{=3.4|ceil} {* izhodi 4 *}
{=135.22|ceil:1} {* izhodi 135.3 *}
{=135.22|ceil:3} {* izhodi 135.22 *}
capitalize
Vrne različico vrednosti, ki je označena z naslovi. Besede se začnejo z velikimi črkami, vsi preostali znaki so mali.
Zahteva razširitev PHP mbstring
.
{='i like LATTE'|capitalize} {* outputs 'I Like Latte' *}
Glej tudi firstUpper, lower, upper.
checkUrl
Uveljavlja čiščenje URL-jev. Preveri, ali spremenljivka vsebuje spletni naslov URL (tj. protokol HTTP/HTTPS), in prepreči zapis povezav, ki bi lahko predstavljale varnostno tveganje.
{var $link = 'javascript:window.close()'}
<a data-href={$link|checkUrl}>checked</a>
<a data-href={$link}>unchecked</a>
Izpisuje:
<a data-href="">checked</a>
<a data-href="javascript:window.close()">unchecked</a>
Glej tudi nocheck.
clamp (int|float $min, int|float $max)
Vrne vrednost, ki je omejena na vključujoče območje min in max.
{$level|clamp: 0, 255}
Obstaja tudi kot funkcija.
dataStream (string $mimetype=detect)
Pretvori vsebino v podatkovno shemo URI. Uporablja se lahko za vstavljanje slik v HTML ali CSS, ne da bi bilo treba povezovati zunanje datoteke.
Imejmo sliko v spremenljivki $img = Image::fromFile('obrazek.gif')
, potem
<img src={$img|dataStream}>
natisne na primer:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==">
Zahteva razširitev PHP fileinfo
.
date (string $format)
Oblikuje datum in čas v skladu z masko, ki jo uporablja funkcija PHP date. Filter sprejme
datum v obliki časovnega žiga UNIX, kot niz ali kot objekt DateTimeInterface
.
{$today|date:'j. n. Y'}
Glej tudi localDate.
escapeUrl
Izbriše spremenljivko, ki se uporabi kot parameter v naslovu URL.
<a href="http://example.com/{$name|escapeUrl}">{$name}</a>
Glej tudi poizvedbo.
explode (string
$separator=''
)
Razdeli niz z danim ločilom in vrne polje nizov. Vzdevek za split
.
{='one,two,three'|explode:','} {* returns ['one', 'two', 'three'] *}
Če je ločilo prazen niz (privzeta vrednost), se vhodni niz razdeli na posamezne znake:
{='123'|explode} {* vrne ['1', '2', '3'] *}
Uporabite lahko tudi vzdevek split
:
{='1,2,3'|split:','} {* vrne ['1', '2', '3'] *}
Glej tudi implode.
first
Vrne prvi element polja ali znak niza:
{=[1, 2, 3, 4]|first} {* izhodi 1 *}
{='abcd'|first} {* izhodi 'a' *}
floor (int $precision=0)
Zaokroži število do določene natančnosti.
{=3.5|floor} {* izhodi 3 *}
{=135.79|floor:1} {* izhodi 135.7 *}
{=135.79|floor:3} {* izhodi 135.79 *}
Glejte tudi strop, zaokrožitev.
firstUpper
Prvo črko vrednosti pretvori v veliko črko. Zahteva razširitev PHP mbstring
.
{='the latte'|firstUpper} {* outputs 'The latte' *}
Oglejte si tudi velika začetnica, mala začetnica, velika začetnica.
group (string|int|\Closure $by): array
Filter razvrsti podatke v skupine glede na različna merila.
V tem primeru so vrstice v tabeli razvrščene po stolpcu categoryId
. Rezultat je polje polj, kjer je ključ
vrednost v stolpcu categoryId
. Preberite podrobna
navodila.
{foreach ($items|group: categoryId) as $categoryId => $categoryItems}
<ul>
{foreach $categoryItems as $item}
<li>{$item->name}</li>
{/foreach}
</ul>
{/foreach}
Oglejte si tudi paket, funkcijo group in oznako iterateWhile.
implode (string $glue=''
)
Vrne niz, ki je sestavljen iz nizov v polju. Vzdevek za join
.
{=[1, 2, 3]|implode} {* izhodi '123' *}
{=[1, 2, 3]|implode:'|'} {* izhodi '1|2|3' *}
Uporabite lahko tudi vzdevek join
:
{=[1, 2, 3]|join} {* izhodi '123' *}
indent (int $level=1, string
$char="\t"
)
Odmakne besedilo od leve strani za določeno število tabulatorjev ali drugih znakov, ki jih določimo v drugem neobveznem argumentu. Prazne vrstice se ne odrivajo.
<div>
{block |indent}
<p>Hello</p>
{/block}
</div>
Natisne:
<div>
<p>Hello</p>
</div>
last
Vrne zadnji element polja ali znak niza:
{=[1, 2, 3, 4]|last} {* izhodi 4 *}
{='abcd'|last} {* izhodi 'd' *}
length
Vrne dolžino niza ali polja.
- za nize vrne dolžino v znakih UTF-8
- za polja vrne število elementov
- za predmete, ki implementirajo vmesnik Countable, bo uporabil povratno vrednost funkcije count()
- za predmete, ki implementirajo vmesnik IteratorAggregate, uporabi povratno vrednost iterator_count()
{if ($users|length) > 10}
...
{/if}
localDate (?string $format=null, ?string $date=null, ?string $time=null)
Oblikuje datum in čas glede na lokalno okolje, kar zagotavlja
dosleden in lokaliziran prikaz časovnih podatkov v različnih jezikih in regijah. Filter sprejme datum kot časovni žig UNIX,
niz ali objekt DateTimeInterface
.
{$date|localDate} {* 15. dubna 2024 *}
{$date|format: yM} {* 4/2024 *}
{$date|localDate: date: medium} {* 15. 4. 2024 *}
Če filter uporabite brez parametrov, bo izpisal datum v dolgem formatu, kot je pojasnjeno v nadaljevanju.
a) Uporaba oblike
Parameter format
opisuje, katere časovne komponente je treba prikazati. Uporablja črkovne kode, pri čemer
število ponovitev vpliva na širino izpisa:
Leto | y / yy / yyyy |
2024 / 24 / 2024 |
Mesec | M / MM / MMM / MMMM |
8 / 08 / avg. / avgust |
Dan | d / dd / E / EEEE |
1 / 01 / ned. / nedelja |
Ura | j / H / h |
prednostno / 24-urno / 12-urno |
Minuta | m / mm |
5 / 05 (2 števki v kombinaciji s sekundami) |
Sekunda | s / ss |
8 / 08 (2 števki v kombinaciji z minutami) |
Vrstni red kod v formatu ni pomemben, saj bo vrstni red komponent prikazan v skladu s konvencijami lokalnega okolja. Zato je
oblika neodvisna od krajevnega okolja. Na primer, format yyyyMMMMd
v lokalnem okolju en_US
prikaže
April 15, 2024
, medtem ko v lokalnem okolju cs_CZ
prikaže 15. dubna 2024
:
locale: | sl-SI | en_US |
---|---|---|
format: 'dMy' |
10. 8. 2024 | 8/10/2024 |
format: 'yM' |
8/2024 | 8/2024 |
format: 'yyyyMMMM' |
avgust 2024 | August 2024 |
format: 'MMMM' |
avgust | August |
format: 'jm' |
17:54 | 5:54 PM |
format: 'Hm' |
17:54 | 17:54 |
format: 'hm' |
5:54 pop. | 5:54 PM |
b) Uporaba prednastavljenih slogov
Parametra date
in time
določata stopnjo podrobnosti prikaza datuma in časa. Izbirate lahko med več
ravnmi: full
, long
, medium
, short
. Prikažete lahko samo datum, samo čas
ali oboje:
locale: | sl-SI | en_US |
---|---|---|
date: short |
23. 01. 78 | 1/23/78 |
date: medium |
23. jan. 1978 | Jan 23, 1978 |
date: long |
23. januar 1978 | January 23, 1978 |
date: full |
ponedeljek, 23. januar 1978 | Monday, January 23, 1978 |
time: short |
08:30 | 8:30 AM |
time: medium |
08:30:59 | 8:30:59 AM |
time: long |
08:30:59 GMT+1 | 8:30:59 AM GMT+1 |
date: short, time: short |
23. 01. 78, 08:30 | 1/23/78, 8:30 AM |
date: medium, time: short |
23. jan. 1978, 08:30 | Jan 23, 1978, 8:30 AM |
date: long, time: short |
23. januar 1978 ob 08:30 | January 23, 1978 at 8:30 AM |
Za datum lahko uporabite tudi predpono relative-
(npr. relative-short
), ki za datume blizu sedanjosti
prikaže yesterday
, today
ali tomorrow
; sicer se prikaže na standardni način.
{$date|localDate: date: relative-short} {* yesterday *}
Glejte tudi datum.
lower
Pretvori vrednost v male črke. Zahteva razširitev PHP mbstring
.
{='LATTE'|lower} {* izhodi 'latte' *}
Glej tudi capitalize, firstUpper, upper.
nocheck
Preprečuje samodejno prečiščevanje URL. Latte samodejno preveri, ali spremenljivka vsebuje spletni naslov URL (tj. protokol HTTP/HTTPS), in prepreči zapis povezav, ki bi lahko predstavljale varnostno tveganje.
Če povezava uporablja drugo shemo, na primer javascript:
ali data:
, in ste prepričani o njeni
vsebini, lahko preverjanje onemogočite prek |nocheck
.
{var $link = 'javascript:window.close()'}
<a href={$link}>checked</a>
<a href={$link|nocheck}>unchecked</a>
Izpisi:
<a href="">checked</a>
<a href="javascript:window.close()">unchecked</a>
Glej tudi checkUrl.
noescape
Onemogoči samodejno izrivanje.
{var $trustedHtmlString = '<b>hello</b>'}
Escaped: {$trustedHtmlString}
Unescaped: {$trustedHtmlString|noescape}
Natisne:
Escaped: <b>hello</b>
Unescaped: <b>hello</b>
Zloraba filtra noescape
lahko privede do ranljivosti XSS! Nikoli ga ne uporabljajte, razen če ste
trdno prepričani, kaj počnete in da niz, ki ga tiskate, prihaja iz zaupanja vrednega vira.
number (int $decimals=0, string
$decPoint='.'
, string $thousandsSep=','
)
Oblikuje število na določeno število decimalnih mest. Če je nastavljen lokalni jezik, se uporabijo ustrezna ločila za decimalke in tisočinke.
{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)
S parametrom format
lahko videz številk določite točno po svojih potrebah. Zahteva nastavljeno lokalno okolje. Oblika je sestavljena iz več posebnih znakov, katerih
popoln opis je na voljo v dokumentaciji “DecimalFormat”::https://unicode.org/…numbers.html#…
- <c id=6/> obvezna številka, ki je vedno prikazana, tudi če je enaka nič
#
neobvezna števka, prikazana samo, če ima število na tem mestu števko@
pomembna števka, pomaga prikazati število z določenim številom pomembnih števk.
označuje, kje mora biti decimalno ločilo (vejica ali pika, odvisno od lokalnega okolja),
se uporablja za ločevanje skupin številk, običajno tisočic%
pomnoži število s 100 in doda znak odstotka
Oglejmo si nekaj primerov. V prvem primeru sta dve decimalki obvezni, v drugem pa neobvezni. Tretji primer prikazuje polnilo z ničlami na obeh straneh, četrti pa prikazuje samo obstoječe števke:
{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 *}
Pomembne števke določajo, koliko števk, ne glede na decimalno vejico, naj se prikaže, pri čemer se število po potrebi zaokroži:
{1234|number: '@@'} {* 1200 *}
{1234|number: '@@@'} {* 1230 *}
{1234|number: '@@@#'} {* 1234 *}
{1.2345|number: '@@@'} {* 1.23 *}
{0.00123|number: '@@'} {* 0.0012 *}
Enostaven način za prikaz števila v odstotkih. Število pomnožimo s 100 in dodamo znak %
:
{0.1234|number: '#.##%'} {* 12.34% *}
Za pozitivna in negativna števila, ločena z znakom ;
, lahko določimo drugačno obliko. Tako lahko na primer
pozitivna števila prikažemo z znakom +
:
{42|number: '#.##;(#.##)'} {* 42 *}
{-42|number: '#.##;(#.##)'} {* (42) *}
{42|number: '+#.##;-#.##'} {* +42 *}
{-42|number: '+#.##;-#.##'} {* -42 *}
Ne pozabite, da se dejanski videz številk lahko razlikuje glede na nastavitve lokalnega okolja. V nekaterih državah se na primer namesto pike kot decimalno ločilo uporablja vejica. Ta filter to samodejno upošteva, zato vam ni treba skrbeti za to.
padLeft (int $length, string
$pad=' '
)
Podaljša niz do določene dolžine z drugim nizom z leve.
{='hello'|padLeft: 10, '123'} {* izhodi '12312hello' *}
padRight (int $length, string
$pad=' '
)
Podloži niz na določeno dolžino z drugim nizom z desne.
{='hello'|padRight: 10, '123'} {* izpisi 'hello12312' *}
query
Dinamično ustvari poizvedbeni niz v naslovu URL:
<a href="http://example.com/?{[name: 'John Doe', age: 43]|query}">click</a>
<a href="http://example.com/?search={$search|query}">search</a>
Natisne:
<a href="http://example.com/?name=John+Doe&age=43">click</a>
<a href="http://example.com/?search=Foo+Bar">search</a>
Ključi z vrednostjo null
so izpuščeni.
Glej tudi escapeUrl.
random
Vrne naključni element polja ali znak niza:
{=[1, 2, 3, 4]|random} {* izhodni primer: 3 *}
{='abcd'|random} {* izhodni primer: 'b' *}
repeat (int $count)
Ponovi niz x-krat.
{='hello'|repeat: 3} {* izhodi 'hellohellohello' *}
replace (string|array $search, string
$replace=''
)
Zamenja vse pojavitve iskanega niza z nadomestnim nizom.
{='hello world'|replace: 'world', 'friend'} {* outputs 'hello friend' *}
Izvede se lahko več zamenjav naenkrat:
{='hello world'|replace: [h => l, l => h]} {* izhodi 'lehho worhd' *}
replaceRE (string $pattern, string
$replace=''
)
Zamenja vse pojavitve v skladu z regularnim izrazom.
{='hello world'|replaceRE: '/l.*/', 'l'} {* izhodi 'hel' *}
reverse
Obrne dani niz ali polje.
{var $s = 'Nette'}
{$s|reverse} {* izhodi 'etteN' *}
{var $a = ['N', 'e', 't', 't', 'e']}
{$a|reverse} {* vrne ['e', 't', 't', 'e', 'N'] *}
round (int $precision=0)
Zaokroži število na določeno natančnost.
{=3.4|round} {* izhodi 3 *}
{=3.5|round} {* izhodi 4 *}
{=135.79|round:1} {* izhodi 135.8 *}
{=135.79|round:3} {* izhodi 135.79 *}
slice (int $start, ?int $length=null, bool $preserveKeys=false)
Izvleče rezino polja ali niza.
{='hello'|slice: 1, 2} {* izhodi 'el' *}
{=['a', 'b', 'c']|slice: 1, 2} {* izhodi ['b', 'c'] *}
Filter rezine deluje kot funkcija PHP array_slice
za polja in mb_substr
za nize s povratno funkcijo
iconv_substr
v načinu UTF-8.
Če je začetek nenegativen, se zaporedje v spremenljivki začne s tem začetkom. Če je start negativen, se zaporedje začne tako daleč od konca spremenljivke.
Če je podana dolžina in je pozitivna, bo imelo zaporedje do toliko elementov. Če je spremenljivka krajša od dolžine, bodo prisotni samo razpoložljivi elementi spremenljivke. Če je podana dolžina in je negativna, se bo zaporedje ustavilo toliko elementov od konca spremenljivke. Če je dolžina izpuščena, bo zaporedje vsebovalo vse od odmika do konca spremenljivke.
Filter bo privzeto spremenil vrstni red in ponastavil ključe celoštevilskega polja. To obnašanje lahko spremenite z nastavitvijo vrednosti preserveKeys na true. Vrstični ključi se vedno ohranijo, ne glede na ta parameter.
sort (?Closure $comparison, string|int|\Closure|null $by=null, string|int|\Closure|bool $byKey=false)
Filter razvrsti elemente polja ali iteratorja, pri čemer ohrani njihove asociativne ključe. Ko je nastavljen lokalni jezik, razvrščanje sledi njegovim pravilom, razen če je določena primerjalna funkcija po meri.
{foreach ($names|sort) as $name}
...
{/foreach}
Polje je razvrščeno v obratnem vrstnem redu.
{foreach ($names|sort|reverse) as $name}
...
{/foreach}
Za razvrščanje lahko določite primerjalno funkcijo po meri (primer prikazuje, kako obrniti razvrščanje od največjega do najmanjšega):
{var $reverted = ($names|sort: fn($a, $b) => $b <=> $a)}
Filter |sort
omogoča tudi razvrščanje elementov po ključu:
{foreach ($names|sort: byKey: true) as $name}
...
{/foreach}
Če želite tabelo razvrstiti po določenem stolpcu, lahko uporabite parameter by
. Vrednost 'name'
v primeru določa, da se razvrščanje opravi po $row->name
ali $row['name']
, odvisno od tega, ali
je $row
polje ali objekt:
{foreach ($items|sort: by: 'name') as $item}
{$item->name}
{/foreach}
Določite lahko tudi funkcijo povratnega klica, ki določi vrednost, po kateri se bo razvrščalo:
{foreach ($items|sort: by: fn($items) => $items->category->name) as $item}
{$item->name}
{/foreach}
Na enak način lahko uporabite tudi parameter byKey
.
spaceless
Odstrani nepotrebne bele lise iz izpisa. Uporabite lahko tudi vzdevek strip
.
{block |spaceless}
<ul>
<li>Hello</li>
</ul>
{/block}
Natisne:
<ul> <li>Hello</li> </ul>
stripHtml
Pretvarja HTML v navadno besedilo. To pomeni, da odstrani oznake HTML in pretvori entitete HTML v besedilo.
{='<p>one < two</p>'|stripHtml} {* outputs 'one < two' *}
Dobljeno navadno besedilo lahko seveda vsebuje znake, ki predstavljajo oznake HTML, na primer
'<p>'|stripHtml
se pretvori v <p>
. Dobljenega besedila nikoli ne izpišite s
|noescape
, saj to lahko povzroči varnostno ranljivost.
substr (int $offset, ?int $length=null)
Izvleče rezino niza. Ta filter je bil nadomeščen s filtrom za rezine.
{$string|substr: 1, 2}
translate (string $message, …$args)
Prevaja izraze v druge jezike. Če želite, da je filter na voljo, morate nastaviti prevajalnik. Za prevajanje lahko uporabite tudi oznake.
<a href="basket">{='Baskter'|translate}</a>
<span>{$item|translate}</span>
trim (string
$charlist=" \t\n\r\0\x0B\u{A0}"
)
Odstrani vodilne in končne znake, privzeto beli prostor.
{=' I like Latte. '|trim} {* outputs 'I like Latte.' *}
{=' I like Latte.'|trim: '.'} {* outputs ' I like Latte' *}
truncate (int $length, string
$append='…'
)
Skrajša niz na največjo dovoljeno dolžino, vendar poskuša ohraniti cele besede. Če je niz skrajšan, na koncu doda elipso (to lahko spremenite z drugim parametrom).
{var $title = 'Hello, how are you?'}
{$title|truncate:5} {* Hell… *}
{$title|truncate:17} {* Hello, how are… *}
{$title|truncate:30} {* Hello, how are you? *}
upper
Pretvori vrednost v velike črke. Zahteva razširitev PHP mbstring
.
{='latte'|upper} {* izhodi 'LATTE' *}
Glej tudi capitalize, firstUpper, lower.
webalize
Pretvarja v ASCII.
Prevede presledke v pomišljaje. Odstrani znake, ki niso alfanumerični znaki, podčrtaji ali pomišljaji. Pretvarja v male črke. Odstrani tudi začetni in končni beli presledek.
{var $s = 'Our 10. product'}
{$s|webalize} {* izhodi 'our-10-product' *}
Zahteva paket nette/utils.