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.

Transformation
batch gibt lineare Daten in Tabellenform aus
breakLines fügt vor jedem Zeilenumbruch einen HTML-Zeilenumbruch ein
bytes formatiert eine Größe in Bytes
clamp begrenzt einen Wert auf den angegebenen Bereich
column extrahiert eine einzelne Spalte aus einem Array
commas verbindet ein Array mit Kommas
limit begrenzt die Länge eines Arrays, Strings oder Iterators
dataStream Konvertierung in das Data-URI-Protokoll
date formatiert Datum und Uhrzeit
explode teilt einen String anhand eines Trennzeichens in ein Array
filter filtert die Elemente einer iterierbaren Struktur nach einem Prädikat
first gibt das erste Element eines Arrays oder das erste Zeichen eines Strings zurück
group gruppiert Daten nach verschiedenen Kriterien
implode verbindet ein Array zu einem String
indent rückt den Text von links um eine angegebene Anzahl Tabulatoren ein
join verbindet ein Array zu einem String
last gibt das letzte Element eines Arrays oder das letzte Zeichen eines Strings zurück
length gibt die Länge eines Strings oder Arrays zurück
localDate formatiert Datum und Uhrzeit gemäß dem Locale
map wendet einen Callback auf jedes Element an
number formatiert eine Zahl
padLeft füllt einen String von links auf eine bestimmte Länge auf
padRight füllt einen String von rechts auf eine bestimmte Länge auf
random gibt ein zufälliges Element eines Arrays oder ein zufälliges Zeichen eines Strings zurück
repeat wiederholt einen String
replace ersetzt Vorkommen des gesuchten Strings
replaceRE ersetzt Vorkommen anhand eines regulären Ausdrucks
reverse kehrt einen UTF‑8-String oder ein Array um
slice extrahiert einen Ausschnitt aus einem Array oder einem String
sort sortiert ein Array
spaceless entfernt Leerraum, ähnlich dem Tag spaceless
split teilt einen String anhand eines Trennzeichens in ein Array
strip entfernt Leerraum, veralteter Alias für spaceless
stripHtml entfernt HTML-Tags und wandelt HTML-Entities in Zeichen um
substr gibt einen Teil eines Strings zurück
trim entfernt Leerraum oder andere Zeichen am Anfang und am Ende
translate Übersetzung in andere Sprachen
truncate kürzt die Länge unter Wahrung ganzer Wörter
webalize bringt einen UTF‑8-String in das in URLs verwendete Format
Groß- und Kleinschreibung
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
Runden
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
HTML-Attribute
accept akzeptiert das neue Verhalten smarter Attribute
toggle schaltet die Anwesenheit eines HTML-Attributs um
Escaping
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.

Sicherheit
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 &amp; 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 *}

Siehe auch floor, round.

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

Siehe auch last, random.

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

Siehe auch ceil, round.

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

Siehe auch commas, explode.

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

Siehe auch first, random.

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

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

Siehe auch first, last.

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

Siehe auch ceil, floor.

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

Der entstehende reine Text kann natürlich Zeichen enthalten, die HTML-Tags darstellen, zum Beispiel wird '&lt;p&gt;'|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.

Version: 3.x