Latte-Filter
In Templates können wir Funktionen verwenden, die dabei helfen, Daten zu verändern oder in ihre endgültige Form zu bringen. Wir nennen sie Filter.
capitalize |
Kleinbuchstaben, erster Buchstabe jedes Wortes groß |
firstLower |
wandelt den ersten Buchstaben in einen Kleinbuchstaben um |
firstUpper |
wandelt den ersten Buchstaben in einen Großbuchstaben um |
lower |
wandelt in Kleinbuchstaben um |
upper |
wandelt in Großbuchstaben um |
ceil |
rundet eine Zahl mit der angegebenen Genauigkeit auf |
floor |
rundet eine Zahl mit der angegebenen Genauigkeit ab |
round |
rundet eine Zahl mit der angegebenen Genauigkeit |
accept |
akzeptiert das neue Verhalten smarter Attribute |
toggle |
schaltet die Anwesenheit eines HTML-Attributs um |
escapeUrl |
escapt einen Parameter in einer URL |
noescape |
gibt eine Variable ohne Escaping aus |
query |
erzeugt einen Query-String in einer URL |
Es gibt außerdem Escaping-Filter für HTML (escapeHtml und escapeHtmlComment), XML
(escapeXml), JavaScript (escapeJs), CSS (escapeCss) und iCalendar
(escapeICal), die Latte dank des kontextsensitiven Escapings selbst verwendet,
sodass Sie sie nicht schreiben müssen.
checkUrl |
bereinigt eine URL-Adresse von gefährlichen Eingaben |
nocheck |
verhindert die automatische Bereinigung einer URL |
Latte prüft automatisch die Attribute
src und href, sodass Sie den Filter checkUrl fast nie brauchen.
Alle eingebauten Filter sind für Strings in der Kodierung UTF‑8 ausgelegt.
Verwendung
Filter werden hinter dem Pipe-Symbol geschrieben (ein Leerzeichen davor ist erlaubt):
<h1>{$heading|upper}</h1>
Filter lassen sich verketten und werden dann der Reihe nach von links nach rechts angewendet:
<h1>{$heading|lower|capitalize}</h1>
Parameter werden hinter dem Filternamen angegeben, getrennt durch Doppelpunkte oder Kommas:
<h1>{$heading|truncate:20,''}</h1>
Filter lassen sich auch auf einen Ausdruck anwenden:
{var $name = ($title|upper) . ($subtitle|lower)}
Eigene Filter lassen sich auf diese Weise registrieren:
$latte = new Latte\Engine;
$latte->addFilter('shortify', fn(string $s, int $len = 10) => mb_substr($s, 0, $len));
Im Template wird er dann so aufgerufen:
<p>{$text|shortify}</p>
<p>{$text|shortify:100}</p>
Nullsafe-Filter
Jeder Filter lässt sich nullsafe machen, indem man ?| statt | schreibt. Ist der Wert
null, wird der Filter nicht ausgeführt und null zurückgegeben. Auch die weiteren Filter in der Kette
werden übersprungen.
Nützlich ist das in Verbindung mit HTML-Attributen, die weggelassen werden, wenn der Wert null ist.
<div title={$title?|upper}>
{* Wenn $title null ist: <div> *}
{* Wenn $title 'hello' ist: <div title="HELLO"> *}
Filter
accept
Der Filter wird bei der Migration von Latte 3.0 verwendet, um zu bestätigen, dass Sie die Änderung des Attributverhaltens geprüft haben und akzeptieren. Den Wert verändert er nicht.
Es handelt sich um ein temporäres Werkzeug. Sobald die Migration abgeschlossen ist und die Migrationswarnungen abgeschaltet sind, sollten Sie diesen Filter aus Ihren Templates entfernen.
batch (int $length, mixed $rest=null): Generator
Ein Filter, der die Ausgabe linearer Daten in Tabellenform vereinfacht. Er gibt einen Generator von Arrays mit der angegebenen Anzahl von Elementen zurück. Wenn Sie einen zweiten Parameter angeben, wird dieser verwendet, um fehlende Elemente in der letzten Zeile aufzufüllen.
{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>
Gibt aus:
<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>
Siehe auch group und den Tag iterateWhile.
breakLines
Fügt vor jedem Zeilenumbruchzeichen einen HTML-Tag <br> ein.
{var $s = "Text & with \n newline"}
{$s|breakLines} {* gibt "Text & with <br>\n newline" aus *}
bytes (int $precision=2)
Formatiert eine Größe in Bytes in eine für Menschen lesbare Form. Ist das Locale gesetzt, werden die entsprechenden Dezimal- und Tausendertrennzeichen verwendet.
{$size|bytes} {* 0 B, 1.25 GB, … *}
{$size|bytes:0} {* 10 B, 1 GB, … *}
ceil (int $precision=0)
Rundet eine Zahl mit der angegebenen Genauigkeit auf.
{=3.4|ceil} {* gibt 4 aus *}
{=135.22|ceil:1} {* gibt 135.3 aus *}
{=135.22|ceil:3} {* gibt 135.22 aus *}
capitalize
Wörter beginnen mit einem Großbuchstaben, alle übrigen Zeichen werden kleingeschrieben. Erfordert die PHP-Erweiterung
mbstring.
{='i like LATTE'|capitalize} {* gibt 'I Like Latte' aus *}
Siehe auch firstLower, firstUpper, lower, upper.
checkUrl
Erzwingt die Bereinigung einer URL. Er prüft, ob die URL ein sicheres Schema verwendet (http, https,
ftp, mailto, tel, sms) oder ein relativer Link ist, und blockiert gefährliche
Schemata wie javascript:, die ein Sicherheitsrisiko darstellen könnten.
{var $link = 'javascript:window.close()'}
<a data-href={$link|checkUrl}>checked</a>
<a data-href={$link}>unchecked</a>
Gibt aus:
<a data-href="">checked</a>
<a data-href="javascript:window.close()">unchecked</a>
Siehe auch nocheck.
clamp (int|float $min, int|float $max)
Begrenzt einen Wert auf den angegebenen Bereich zwischen min und max, jeweils einschließlich.
{$level|clamp: 0, 255}
Existiert auch als Funktion.
column (string|int|null $columnKey, string|int|null $indexKey=null)
Gibt die Werte einer einzelnen Spalte $columnKey aus einem mehrdimensionalen Array als neues Array zurück. Lässt
sich auch auf Arrays von Objekten anwenden, um die Werte von Properties zu extrahieren.
{var $users = [
[id: 30, name: 'John', age: 30],
[id: 32, name: 'Jane', age: 25],
[id: 33, age: 35],
]}
{$users|column: 'name'}
{* gibt ['John', 'Jane'] zurück *}
{$users|column: 'name', 'id'}
{* gibt [30 => 'John', 32 => 'Jane'] zurück *}
Wenn Sie als Spaltenschlüssel null übergeben, wird das Array nach $indexKey neu indexiert.
commas (?string $lastGlue=null)
Verbindet die Elemente eines Arrays mit Komma und Leerzeichen (', '). Eine praktische Abkürzung, um Elemente in
einer für Menschen lesbaren Form aufzuzählen.
{var $items = ['apples', 'oranges', 'bananas']}
{$items|commas}
{* gibt 'apples, oranges, bananas' aus *}
Für das letzte Paar von Elementen können Sie auch ein eigenes Trennzeichen angeben:
{$items|commas: ' and '}
{* gibt 'apples, oranges and bananas' aus *}
{=['PHP', 'JavaScript', 'Python']|commas: ', or '}
{* gibt 'PHP, JavaScript, or Python' aus *}
Siehe auch implode.
dataStream (?string $type=null)
Konvertiert den Inhalt in das Data-URI-Schema. Damit lassen sich Bilder in HTML oder CSS einbetten, ohne externe Dateien
verlinken zu müssen. Ist $type gleich null, wird der MIME-Typ automatisch erkannt.
Nehmen wir an, in der Variablen $img = Image::fromFile('image.gif') liegt ein Bild, dann
<img src={$img|dataStream}>
gibt zum Beispiel aus:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==">
Erfordert die PHP-Erweiterung fileinfo.
date (string $format='j. n. Y')
Formatiert Datum und Uhrzeit nach der Maske, die die PHP-Funktion date verwendet. Der Filter
akzeptiert das Datum als UNIX-Timestamp, als String, als DateTimeInterface oder als
DateInterval-Objekt.
{$today|date:'j. n. Y'}
Siehe auch localDate.
escapeUrl
Escapt eine Variable für die Verwendung als Parameter in einer URL.
<a href="http://example.com/{$name|escapeUrl}">{$name}</a>
Siehe auch query.
explode (string
$separator='')
Teilt einen String anhand eines Trennzeichens in ein Array. Alias für split.
{='one,two,three'|explode:','} {* gibt ['one', 'two', 'three'] zurück *}
Ist das Trennzeichen ein leerer String (der Standardwert), wird die Eingabe in einzelne Zeichen zerlegt:
{='123'|explode} {* gibt ['1', '2', '3'] zurück *}
Sie können auch den Alias split verwenden:
{='1,2,3'|split:','} {* gibt ['1', '2', '3'] zurück *}
Siehe auch implode.
filter (callable $predicate): iterable
Filtert die Elemente eines Arrays oder Iterators und behält nur diejenigen, für die das Prädikat true
zurückgibt. Die Schlüssel bleiben erhalten.
{foreach ($people|filter: fn($person) => $person->age >= 18) as $adult}
<p>{$adult->name}</p>
{/foreach}
first
Gibt das erste Element eines Arrays oder das erste Zeichen eines Strings zurück:
{=[1, 2, 3, 4]|first} {* gibt 1 aus *}
{='abcd'|first} {* gibt 'a' aus *}
floor (int $precision=0)
Rundet eine Zahl mit der angegebenen Genauigkeit ab.
{=3.5|floor} {* gibt 3 aus *}
{=135.79|floor:1} {* gibt 135.7 aus *}
{=135.79|floor:3} {* gibt 135.79 aus *}
firstLower
Wandelt den ersten Buchstaben in einen Kleinbuchstaben um. Erfordert die PHP-Erweiterung mbstring.
{='The Latte'|firstLower} {* gibt 'the Latte' aus *}
Siehe auch capitalize, firstUpper, lower, upper.
firstUpper
Wandelt den ersten Buchstaben in einen Großbuchstaben um. Erfordert die PHP-Erweiterung mbstring.
{='the latte'|firstUpper} {* gibt 'The latte' aus *}
Siehe auch capitalize, firstLower, lower, upper.
group (string|int|\Closure $by): iterable
Der Filter gruppiert Daten nach verschiedenen Kriterien.
In diesem Beispiel werden die Zeilen der Tabelle nach der Spalte categoryId gruppiert. Die Ausgabe ist eine
iterierbare Struktur von Gruppen, wobei der Schlüssel der Wert in der Spalte categoryId ist. Lesen Sie die ausführliche Anleitung.
{foreach ($items|group: categoryId) as $categoryId => $categoryItems}
<ul>
{foreach $categoryItems as $item}
<li>{$item->name}</li>
{/foreach}
</ul>
{/foreach}
Siehe auch batch, die Funktion group und den Tag iterateWhile.
implode (string $glue='')
Gibt einen String zurück, der die Elemente der Sequenz aneinandergereiht enthält. Alias für join.
{=[1, 2, 3]|implode} {* gibt '123' aus *}
{=[1, 2, 3]|implode:'|'} {* gibt '1|2|3' aus *}
Sie können auch den Alias join verwenden:
{=[1, 2, 3]|join} {* gibt '123' aus *}
indent (int $level=1, string
$chars="\t")
Rückt den Text von links um die angegebene Anzahl von Tabulatoren oder anderen im zweiten Argument angegebenen Zeichen ein. Leere Zeilen werden nicht eingerückt.
<div>
{block |indent}
<p>Hello</p>
{/block}
</div>
Gibt aus:
<div>
<p>Hello</p>
</div>
last
Gibt das letzte Element eines Arrays oder das letzte Zeichen eines Strings zurück:
{=[1, 2, 3, 4]|last} {* gibt 4 aus *}
{='abcd'|last} {* gibt 'd' aus *}
length
Gibt die Länge eines Strings oder Arrays zurück.
- bei Strings gibt er die Länge in UTF‑8-Zeichen zurück
- bei Arrays gibt er die Anzahl der Elemente zurück
- bei Objekten, die das Interface Countable implementieren, verwendet er den Rückgabewert der
Methode
count() - bei Objekten, die das Interface Traversable implementieren, verwendet er den Rückgabewert der
Funktion
iterator_count()
{if ($users|length) > 10}
...
{/if}
localDate (?string $format=null, ?string $date=null, ?string $time=null)
Formatiert Datum und Uhrzeit gemäß dem Locale und sorgt so für
eine einheitliche, lokalisierte Darstellung von Zeitangaben über verschiedene Sprachen und Regionen hinweg. Der Filter akzeptiert
das Datum als UNIX-Timestamp, als String oder als DateTimeInterface-Objekt.
{$date|localDate} {* 15. April 2024 *}
{$date|localDate: format: yM} {* 4/2024 *}
{$date|localDate: date: medium} {* 15.04.2024 *}
Wenn Sie den Filter ohne Parameter verwenden, wird das Datum in der Stufe long ausgegeben, siehe unten.
a) Verwendung eines Formats
Der Parameter format beschreibt, welche Zeitkomponenten dargestellt werden sollen. Er verwendet dafür
Buchstabencodes, deren Anzahl der Wiederholungen die Breite der Ausgabe beeinflusst:
| Jahr | y / yy / yyyy |
2024 / 24 / 2024 |
| Monat | M / MM / MMM / MMMM |
8 / 08 / Aug / August |
| Tag | d / dd / E / EEEE |
1 / 01 / So / Sonntag |
| Stunde | j / H / h |
bevorzugt / 24-Stunden / 12-Stunden |
| Minute | m / mm |
5 / 05 (2 Ziffern in Kombination mit Sekunden) |
| Sekunde | s / ss |
8 / 08 (2 Ziffern in Kombination mit Minuten) |
Auf die Reihenfolge der Codes im Format kommt es nicht an, denn die Reihenfolge der Komponenten richtet sich nach den
Gepflogenheiten des Locale. Das Format ist davon also unabhängig. Zum Beispiel gibt das Format yyyyMMMMd im Locale
en_US April 15, 2024 aus, im Locale cs_CZ dagegen 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) Verwendung voreingestellter Stile
Die Parameter date und time legen fest, wie ausführlich Datum und Uhrzeit ausgegeben werden. Sie
können aus mehreren Stufen wählen: full, long, medium, short. Sie können
nur das Datum, nur die Uhrzeit oder beides ausgeben lassen:
| 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 |
Beim Datum lässt sich zusätzlich das Präfix relative- verwenden (z. B. relative-short), das für
Daten nahe der Gegenwart gestern, heute oder morgen anzeigt; sonst wird auf die übliche
Weise ausgegeben.
{$date|localDate: date: relative-short} {* gestern *}
Siehe auch date.
lower
Wandelt einen String in Kleinbuchstaben um. Erfordert die PHP-Erweiterung mbstring.
{='LATTE'|lower} {* gibt 'latte' aus *}
Siehe auch capitalize, firstLower, firstUpper, upper.
map (callable $transformer): iterable
Transformiert jedes Element eines Arrays oder Iterators mit einem Callback und gibt einen neuen Iterator zurück. Er ist das Gegenstück zum Filter filter. Die Schlüssel bleiben erhalten.
{=($users|map: fn($user) => $user->name)|implode: ', '} {* John, Mary, Paul *}
Siehe auch filter.
nocheck
Verhindert die automatische Bereinigung einer URL. Latte prüft automatisch, ob eine URL ein sicheres Schema
verwendet (etwa http, https, ftp, mailto, tel, sms)
oder ein relativer Link ist, und blockiert potenziell gefährliche Adressen.
Verwendet der Link ein anderes Schema, etwa javascript: oder data:, und sind Sie sich seines Inhalts
sicher, können Sie die Prüfung mit |nocheck abschalten.
{var $link = 'javascript:window.close()'}
<a href={$link}>checked</a>
<a href={$link|nocheck}>unchecked</a>
Gibt aus:
<a href="">checked</a>
<a href="javascript:window.close()">unchecked</a>
Siehe auch checkUrl.
noescape
Schaltet das automatische Escaping ab.
{var $trustedHtmlString = '<b>hello</b>'}
Escaped: {$trustedHtmlString}
Unescaped: {$trustedHtmlString|noescape}
Gibt aus:
Escaped: <b>hello</b>
Unescaped: <b>hello</b>
Ein falscher Einsatz des Filters noescape kann zu einer XSS-Sicherheitslücke führen! Verwenden
Sie ihn niemals, wenn Sie sich nicht absolut sicher sind, was Sie tun und dass der ausgegebene String aus einer
vertrauenswürdigen Quelle stammt.
number (int $decimals=0, string
$decPoint='.', string $thousandsSep=',')
Formatiert eine Zahl auf die angegebene Anzahl von Dezimalstellen. Ist das Locale gesetzt, werden die entsprechenden Dezimal- und Tausendertrennzeichen verwendet.
{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)
Mit dem Parameter format können Sie das Aussehen von Zahlen genau nach Ihren Bedürfnissen festlegen. Dafür muss
das Locale gesetzt sein. Das Format besteht aus mehreren
Sonderzeichen, deren vollständige Beschreibung Sie in der Dokumentation zu DecimalFormat finden:
0Pflichtziffer, wird immer angezeigt, auch wenn sie null ist#optionale Ziffer, wird nur angezeigt, wenn die Zahl an dieser Stelle tatsächlich eine Ziffer hat@signifikante Ziffer, hilft dabei, die Zahl mit einer bestimmten Anzahl signifikanter Ziffern anzuzeigen.gibt an, wo das Dezimaltrennzeichen stehen soll (Punkt oder Komma, je nach Land),dient dazu, Zifferngruppen zu trennen, meist Tausender%multipliziert die Zahl mit 100 und ergänzt das Prozentzeichen
Sehen wir uns einige Beispiele an. Im ersten Beispiel sind zwei Dezimalstellen Pflicht, im zweiten sind sie optional. Das dritte Beispiel zeigt das Auffüllen mit Nullen von links und rechts, das vierte zeigt nur die tatsächlich vorhandenen Ziffern:
{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 *}
Signifikante Ziffern legen fest, wie viele Ziffern unabhängig vom Dezimaltrennzeichen angezeigt werden sollen; bei Bedarf wird gerundet:
{1234|number: '@@'} {* 1200 *}
{1234|number: '@@@'} {* 1230 *}
{1234|number: '@@@#'} {* 1234 *}
{1.2345|number: '@@@'} {* 1.23 *}
{0.00123|number: '@@'} {* 0.0012 *}
Eine einfache Möglichkeit, eine Zahl als Prozentwert anzuzeigen. Die Zahl wird mit 100 multipliziert und das Zeichen
% ergänzt:
{0.1234|number: '#.##%'} {* 12.34% *}
Für positive und negative Zahlen können wir ein unterschiedliches Format definieren, getrennt durch das Zeichen
;. So lassen sich zum Beispiel positive Zahlen mit einem + anzeigen:
{42|number: '#.##;(#.##)'} {* 42 *}
{-42|number: '#.##;(#.##)'} {* (42) *}
{42|number: '+#.##;-#.##'} {* +42 *}
{-42|number: '+#.##;-#.##'} {* -42 *}
Denken Sie daran, dass das tatsächliche Aussehen der Zahlen von den Ländereinstellungen abhängen kann. In manchen Ländern wird zum Beispiel statt eines Punktes ein Komma als Dezimaltrennzeichen verwendet. Dieser Filter berücksichtigt das automatisch, Sie müssen sich also nicht darum kümmern.
padLeft (int $length, string
$append=' ')
Füllt einen String oder eine Zahl von links mit einem anderen String auf eine bestimmte Länge auf.
{='hello'|padLeft: 10, '123'} {* gibt '12312hello' aus *}
{=123|padLeft: 5, '0'} {* gibt '00123' aus *}
padRight (int $length, string
$append=' ')
Füllt einen String oder eine Zahl von rechts mit einem anderen String auf eine bestimmte Länge auf.
{='hello'|padRight: 10, '123'} {* gibt 'hello12312' aus *}
{=123|padRight: 5, '0'} {* gibt '12300' aus *}
query
Erzeugt dynamisch einen Query-String in einer URL:
<a href="http://example.com/?{[name: 'John Doe', age: 43]|query}">click</a>
<a href="http://example.com/?search={$search|query}">search</a>
Gibt aus:
<a href="http://example.com/?name=John+Doe&age=43">click</a>
<a href="http://example.com/?search=Foo+Bar">search</a>
Schlüssel mit dem Wert null werden weggelassen.
Siehe auch escapeUrl.
random
Gibt ein zufälliges Element eines Arrays oder ein zufälliges Zeichen eines Strings zurück:
{=[1, 2, 3, 4]|random} {* gibt z. B. aus: 3 *}
{='abcd'|random} {* gibt z. B. aus: 'b' *}
repeat (int $count)
Wiederholt den String x-mal.
{='hello'|repeat: 3} {* gibt 'hellohellohello' aus *}
replace (string|array $search, string|array
$replace='')
Ersetzt alle Vorkommen des gesuchten Strings durch den Ersatzstring.
{='hello world'|replace: 'world', 'friend'} {* gibt 'hello friend' aus *}
Mehrere Ersetzungen lassen sich auf einmal durchführen:
{='hello world'|replace: [h => l, l => h]} {* gibt 'lehho worhd' aus *}
replaceRE (string $pattern, string
$replacement='')
Führt eine Suche und Ersetzung mit einem regulären Ausdruck durch.
{='hello world'|replaceRE: '/l.*/', 'l'} {* gibt 'hel' aus *}
reverse (bool $preserveKeys=false)
Kehrt den angegebenen String oder das angegebene Array um.
{var $s = 'Nette'}
{$s|reverse} {* gibt 'etteN' aus *}
{var $a = ['N', 'e', 't', 't', 'e']}
{$a|reverse} {* gibt ['e', 't', 't', 'e', 'N'] zurück *}
round (int $precision=0)
Rundet eine Zahl mit der angegebenen Genauigkeit.
{=3.4|round} {* gibt 3 aus *}
{=3.5|round} {* gibt 4 aus *}
{=135.79|round:1} {* gibt 135.8 aus *}
{=135.79|round:3} {* gibt 135.79 aus *}
slice (int $start, ?int $length=null, bool $preserveKeys=false)
Extrahiert einen Ausschnitt aus einem Array, einem String oder einem Iterator.
{='hello'|slice: 1, 2} {* gibt 'el' aus *}
{=['a', 'b', 'c']|slice: 1, 2} {* gibt ['b', 'c'] aus *}
Der Filter arbeitet bei Arrays wie die PHP-Funktion array_slice und bei Strings wie mb_substr. Bei
Iteratoren gibt er einen Generator zurück – die Elemente werden eines nach dem anderen aus der Quelle entnommen und das Lesen
endet, sobald das Limit erreicht ist. Der gesamte Iterator wird nie in den Speicher geladen.
Ist start nicht negativ, beginnt die Sequenz an diesem Offset vom Anfang des Arrays bzw. des Strings. Ist
start negativ, beginnt die Sequenz so weit vom Ende entfernt.
Ist length angegeben und positiv, hat die Sequenz höchstens so viele Elemente. Ist die Eingabe kürzer als
length, sind nur die vorhandenen Elemente enthalten. Ist length angegeben und negativ, endet die Sequenz
so viele Elemente vor dem Ende der Eingabe. Wird es weggelassen, enthält die Sequenz alles von start bis zum Ende
der Eingabe.
Standardmäßig ordnet der Filter die ganzzahligen Array-Schlüssel neu und setzt sie zurück. Dieses Verhalten lässt sich
ändern, indem Sie preserveKeys auf true setzen. String-Schlüssel bleiben unabhängig von diesem Parameter immer
erhalten.
Siehe auch limit.
limit (int $length)
Begrenzt die Länge eines Arrays, eines Strings oder eines Iterators. Bei Arrays und Iteratoren bleiben die Schlüssel erhalten, bei Strings wird UTF-8 berücksichtigt.
{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)
Der Filter sortiert die Elemente eines Arrays oder Iterators und behält dabei ihre assoziativen Schlüssel bei. Ist ein Locale gesetzt, richtet sich die Sortierung nach dessen Regeln, sofern keine eigene Vergleichsfunktion angegeben ist.
{foreach ($names|sort) as $name}
...
{/foreach}
Ein in umgekehrter Reihenfolge sortiertes Array:
{foreach ($names|sort|reverse) as $name}
...
{/foreach}
Sie können für die Sortierung eine eigene Vergleichsfunktion angeben (das Beispiel zeigt, wie sich die Sortierung von größtem zu kleinstem Wert umkehren lässt):
{var $reverted = ($names|sort: fn($a, $b) => $b <=> $a)}
Der Filter |sort erlaubt es auch, die Elemente nach Schlüsseln zu sortieren:
{foreach ($names|sort: byKey: true) as $name}
...
{/foreach}
Wenn Sie eine Tabelle nach einer bestimmten Spalte sortieren müssen, können Sie den Parameter by verwenden. Der
Wert 'name' im Beispiel legt fest, dass nach $item->name oder $item['name'] sortiert
wird, je nachdem, ob $item ein Array oder ein Objekt ist:
{foreach ($items|sort: by: 'name') as $item}
{$item->name}
{/foreach}
Sie können auch eine Callback-Funktion definieren, die den Wert bestimmt, nach dem sortiert wird:
{foreach ($items|sort: by: fn($item) => $item->category->name) as $item}
{$item->name}
{/foreach}
Der Parameter byKey lässt sich auf dieselbe Weise verwenden.
spaceless
Entfernt überflüssigen Leerraum aus der Ausgabe. Sie können auch den veralteten Alias strip verwenden,
spaceless ist jedoch vorzuziehen.
{block |spaceless}
<ul>
<li>Hello</li>
</ul>
{/block}
Gibt aus:
<ul><li>Hello</li></ul>
stripHtml
Wandelt HTML in reinen Text um. Er entfernt also HTML-Tags und wandelt HTML-Entities in Textzeichen um.
{='<p>one < two</p>'|stripHtml} {* gibt 'one < two' aus *}
Der entstehende reine Text kann natürlich Zeichen enthalten, die HTML-Tags darstellen, zum Beispiel wird
'<p>'|stripHtml zu <p>. Geben Sie den entstandenen Text niemals mit
|noescape aus, das kann zu einer Sicherheitslücke führen.
substr (int $start, ?int $length=null)
Extrahiert einen Teil eines Strings. Dieser Filter wurde durch den Filter slice ersetzt.
{$string|substr: 1, 2}
toggle
Der Filter toggle steuert die Anwesenheit eines Attributs anhand eines booleschen Werts. Ist der Wert truthy, ist
das Attribut vorhanden; ist er falsy, entfällt das Attribut vollständig:
<div uk-grid={$isGrid|toggle}>
{* Wenn $isGrid truthy ist: <div uk-grid> *}
{* Wenn $isGrid falsy ist: <div> *}
Dieser Filter ist nützlich für eigene Attribute oder für Attribute von JavaScript-Bibliotheken, die eine Steuerung von Anwesenheit und Abwesenheit ähnlich den booleschen HTML-Attributen erfordern.
Der Filter lässt sich nur innerhalb von HTML-Attributen verwenden.
translate (…$args)
Übersetzt Ausdrücke in andere Sprachen. Damit der Filter zur Verfügung steht, müssen Sie den Übersetzer einrichten. Sie können auch die Tags für die Übersetzung verwenden.
<a href="basket">{='Warenkorb'|translate}</a>
<span>{$item|translate}</span>
trim (string
$charlist=" \t\n\r\0\x0B\u{A0}")
Entfernt Leerraum (oder andere Zeichen) am Anfang und am Ende eines Strings.
{=' I like Latte. '|trim} {* gibt 'I like Latte.' aus *}
{=' I like Latte.'|trim: '.'} {* gibt ' I like Latte' aus *}
truncate (int $length, string
$append='…')
Kürzt einen String auf die angegebene Maximallänge und versucht dabei, ganze Wörter zu erhalten. Wird der String gekürzt, hängt er am Ende Auslassungspunkte an (mit dem zweiten Parameter änderbar).
{var $title = 'Hello, how are you?'}
{$title|truncate:5} {* Hell… *}
{$title|truncate:17} {* Hello, how are… *}
{$title|truncate:30} {* Hello, how are you? *}
upper
Wandelt einen String in Großbuchstaben um. Erfordert die PHP-Erweiterung mbstring.
{='latte'|upper} {* gibt 'LATTE' aus *}
Siehe auch capitalize, firstLower, firstUpper, lower.
webalize
Bringt einen UTF‑8-String in das in URLs verwendete Format.
Wandelt in ASCII um. Wandelt Leerzeichen in Bindestriche um. Entfernt Zeichen, die keine alphanumerischen Zeichen, Unterstriche oder Bindestriche sind. Wandelt in Kleinbuchstaben um. Entfernt außerdem Leerraum am Anfang und am Ende.
{var $s = 'Our 10th product'}
{$s|webalize} {* gibt 'our-10th-product' aus *}
Erfordert die Bibliothek nette/utils.