Filtros Latte
Los filtros son funciones que cambian o formatean los datos de la forma que queramos. Este es un resumen de los filtros incorporados que están disponibles.
capitalize |
minúsculas, la primera letra de cada palabra mayúsculas |
firstUpper |
convierte la primera letra en mayúscula |
lower |
convierte una cadena en minúscula |
upper |
convierte una cadena en mayúscula |
ceil |
redondea un número hacia arriba a una precisión dada |
floor |
redondea un número hacia abajo a una precisión dada |
round |
redondea un número a una precisión dada |
escapeUrl |
escapa parámetro en URL |
noescape |
imprime una variable sin escapar |
query |
genera una cadena de consulta en la URL |
También existen filtros de escapado para HTML (escapeHtml
y escapeHtmlComment
), XML
(escapeXml
), JavaScript (escapeJs
), CSS (escapeCss
) e iCalendar (escapeICal
),
que Latte utiliza por sí mismo gracias al escapado
consciente del contexto y no es necesario escribirlos.
checkUrl |
desinfecta la cadena para su uso dentro del atributo href |
nocheck |
evita la desinfección automática de URLs |
Latte los atributos src
y href
comprueba automáticamente, por lo que casi no es necesario
utilizar el filtro checkUrl
.
Todos los filtros incorporados funcionan con cadenas codificadas en UTF-8.
Utilización
Latte permite llamar a filtros utilizando la notación del signo pipa (se permite el espacio precedente):
<h1>{$heading|upper}</h1>
Los filtros pueden encadenarse, en cuyo caso se aplican en orden de izquierda a derecha:
<h1>{$heading|lower|capitalize}</h1>
Los parámetros se ponen después del nombre del filtro separados por dos puntos o coma:
<h1>{$heading|truncate:20,''}</h1>
Los filtros se pueden aplicar sobre la expresión:
{var $name = ($title|upper) . ($subtitle|lower)}</h1>
Los filtros personalizados se pueden registrar de esta manera:
$latte = new Latte\Engine;
$latte->addFilter('shortify', fn(string $s, int $len = 10) => mb_substr($s, 0, $len));
Lo usamos en una plantilla como esta:
<p>{$text|shortify}</p>
<p>{$text|shortify:100}</p>
Filtros
batch (int length, mixed item): array
Filtro que simplifica el listado de datos lineales en forma de tabla. Devuelve un array de array con el número de elementos dado. Si se proporciona un segundo parámetro, éste se utiliza para rellenar los elementos que faltan en la última fila.
{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>
Imprime:
<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>
breakLines
Inserta saltos de línea HTML antes de todas las nuevas líneas.
{var $s = "Text & with \n newline"}
{$s|breakLines} {* salidas "Text & with <br>\n newline" *}
bytes (int precision = 2)
Formatea un tamaño en bytes a formato legible por humanos.
{$size|bytes} 0 B, 1.25 GB, …
{$size|bytes:0} 10 B, 1 GB, …
ceil (int precision = 0)
Redondea un número hasta una precisión dada.
{=3.4|ceil} {* salidas 4 *}
{=135.22|ceil:1} {* salidas 135.3 *}
{=135.22|ceil:3} {* salidas 135.22 *}
capitalize
Devuelve una versión en mayúsculas del valor. Las palabras comenzarán con mayúsculas, todos los caracteres restantes en
minúsculas. Requiere la extensión PHP mbstring
.
{='i like LATTE'|capitalize} {* salidas 'I Like Latte' *}
Vea también firstUpper, lower, upper.
checkUrl
Aplica la limpieza de URL. Comprueba si la variable contiene una URL web (es decir, protocolo HTTP/HTTPS) e impide la escritura de enlaces que puedan suponer un riesgo para la seguridad.
{var $link = 'javascript:window.close()'}
<a data-href="{$link|checkUrl}">checked</a>
<a data-href="{$link}">unchecked</a>
Imprime:
<a data-href="">checked</a>
<a data-href="javascript:window.close()">unchecked</a>
Véase también nocheck.
clamp (int|float min, int|float max)
Devuelve el valor ajustado al rango inclusivo de mín y máx.
{$level|clamp: 0, 255}
También existe como función.
dataStream (string mimetype = detect)
Convierte el contenido en un esquema URI de datos. Puede utilizarse para insertar imágenes en HTML o CSS sin necesidad de enlazar archivos externos.
Tengamos una imagen en una variable $img = Image::fromFile('obrazek.gif')
, entonces
<img src="{$img|dataStream}">
Imprime por ejemplo
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==">
Requiere extensión PHP fileinfo
.
date (string format)
Devuelve una fecha en el formato dado usando las opciones de las funciones PHP strftime
o date. Filter obtiene una fecha como una marca de tiempo UNIX, una cadena o un objeto de
tipo DateTime
.
{$today|date:'%d.%m.%Y'}
{$today|date:'j. n. Y'}
escapeUrl
Escapa una variable para ser usada como parámetro en URL.
<a href="http://example.com/{$name|escapeUrl}">{$name}</a>
Véase también query.
explode (string separator =
''
)
Divide una cadena por el delimitador dado y devuelve una matriz de cadenas. Alias de split
.
{='one,two,three'|explode:','} {* returns ['one', 'two', 'three'] *}
Si el delimitador es una cadena vacía (valor por defecto), la entrada se dividirá en caracteres individuales:
{='123'|explode} {* returns ['1', '2', '3'] *}
También puede utilizar el alias split
:
{='1,2,3'|split:','} {* returns ['1', '2', '3'] *}
Ver también implode.
first
Devuelve el primer elemento de un array o carácter de una cadena:
{=[1, 2, 3, 4]|first} {* salidas 1 *}
{='abcd'|first} {* salidas 'a' *}
floor (int precision = 0)
Redondea un número a una precisión dada.
{=3.5|floor} {* salidas 3 *}
{=135.79|floor:1} {* salidas 135.7 *}
{=135.79|floor:3} {* salidas 135.79 *}
firstUpper
Convierte la primera letra de un valor a mayúsculas. Requiere la extensión PHP mbstring
.
{='the latte'|firstUpper} {* salidas 'The latte' *}
Vea también capitalize, lower, upper.
implode (string glue = ''
)
Devuelve una cadena que es la concatenación de las cadenas de la matriz. Alias de join
.
{=[1, 2, 3]|implode} {* salidas '123' *}
{=[1, 2, 3]|implode:'|'} {* salidas '1|2|3' *}
También puede utilizar un alias join
:
{=[1, 2, 3]|join} {* salidas '123' *}
indent (int level = 1, string char =
"\t"
)
Indenta un texto desde la izquierda un número determinado de tabulaciones u otros caracteres que especifiquemos en el segundo argumento opcional. Las líneas en blanco no se sangrarán.
<div>
{block |indent}
<p>Hello</p>
{/block}
</div>
Imprime:
<div>
<p>Hello</p>
</div>
last
Devuelve el último elemento del array o carácter de la cadena:
{=[1, 2, 3, 4]|last} {* salidas 4 *}
{='abcd'|last} {* salidas 'd' *}
length
Devuelve la longitud de una cadena o matriz.
- para cadenas, devolverá la longitud en caracteres UTF-8
- para matrices, devolverá el recuento de elementos
- para objetos que implementen la interfaz Countable, utilizará el valor de retorno de count()
- para objetos que implementen la interfaz IteratorAggregate, utilizará el valor de retorno de iterator_count()
{if ($users|length) > 10}
...
{/if}
lower
Convierte un valor a minúsculas. Requiere la extensión PHP mbstring
.
{='LATTE'|lower} {* salidas 'latte' *}
Vea también capitalize, firstUpper, upper.
nocheck
Evita la desinfección automática de URL. Latte comprueba automáticamente si la variable contiene una URL web (es decir, protocolo HTTP/HTTPS) e impide la escritura de enlaces que puedan suponer un riesgo para la seguridad.
Si el enlace utiliza un esquema diferente, como javascript:
o data:
, y está seguro de su contenido,
puede desactivar la comprobación a través de |nocheck
.
{var $link = 'javascript:window.close()'}
<a href="{$link}">checked</a>
<a href="{$link|nocheck}">unchecked</a>
Imprime:
<a href="">checked</a>
<a href="javascript:window.close()">unchecked</a>
Véase también checkUrl.
noescape
Desactiva el escape automático.
{var $trustedHtmlString = '<b>hello</b>'}
Escaped: {$trustedHtmlString}
Unescaped: {$trustedHtmlString|noescape}
Imprime:
Escaped: <b>hello</b>
Unescaped: <b>hello</b>
¡El mal uso del filtro noescape
puede llevar a una vulnerabilidad XSS! Nunca lo utilices a menos
que estés absolutamente seguro de lo que estás haciendo y de que la cadena que estás imprimiendo proviene de una fuente
de confianza.
number (int decimals = 0, string decPoint =
'.'
, string thousandsSep = ','
)
Formatea un número con un número dado de decimales. También puede especificar un carácter del punto decimal y del separador de miles.
{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
padLeft (int length, string pad =
' '
)
Rellena una cadena de una longitud determinada con otra cadena de la izquierda.
{='hello'|padLeft: 10, '123'} {* outputs '12312hello' *}
padRight (int length, string pad =
' '
)
Rellena una cadena de cierta longitud con otra cadena de la derecha.
{='hello'|padRight: 10, '123'} {* outputs 'hello12312' *}
query
Genera dinámicamente una cadena de consulta en la URL:
<a href="http://example.com/?{[name: 'John Doe', age: 43]|query}">click</a>
<a href="http://example.com/?search={$search|query}">search</a>
Imprime:
<a href="http://example.com/?name=John+Doe&age=43">click</a>
<a href="http://example.com/?search=Foo+Bar">search</a>
Las teclas con el valor null
se omiten.
Véase también escapeUrl.
random
Devuelve un elemento aleatorio de una matriz o un carácter de una cadena:
{=[1, 2, 3, 4]|random} {* example output: 3 *}
{='abcd'|random} {* example output: 'b' *}
repeat (int count)
Repite la cadena x veces.
{='hello'|repeat: 3} {* salidas 'hellohellohello' *}
replace (string|array search, string replace =
''
)
Sustituye todas las apariciones de la cadena de búsqueda por la cadena de sustitución.
{='hello world'|replace: 'world', 'friend'} {* salidas 'hello friend' *}
Se pueden realizar varias sustituciones a la vez:
{='hello world'|replace: [h => l, l => h]} {* salidas 'lehho worhd' *}
replaceRE (string pattern, string replace =
''
)
Reemplaza todas las ocurrencias según la expresión regular.
{='hello world'|replaceRE: '/l.*/', 'l'} {* salidas 'hel' *}
reverse
Invierte la cadena o matriz dada.
{var $s = 'Nette'}
{$s|reverse} {* salidas 'etteN' *}
{var $a = ['N', 'e', 't', 't', 'e']}
{$a|reverse} {* returns ['e', 't', 't', 'e', 'N'] *}
round (int precision = 0)
Redondea un número a una precisión dada.
{=3.4|round} {* salidas 3 *}
{=3.5|round} {* salidas 4 *}
{=135.79|round:1} {* salidas 135.8 *}
{=135.79|round:3} {* salidas 135.79 *}
slice (int start, int length = null, bool preserveKeys = false)
Extrae una porción de una matriz o una cadena.
{='hello'|slice: 1, 2} {* salidas 'el' *}
{=['a', 'b', 'c']|slice: 1, 2} {* salidas ['b', 'c'] *}
El filtro de rebanada funciona como la función PHP array_slice
para matrices y mb_substr
para
cadenas con un fallback a iconv_substr
en modo UTF-8.
Si start es no negativo, la secuencia comenzará en ese inicio de la variable. Si start es negativo, la secuencia comenzará a esa distancia del final de la variable.
Si la longitud es positiva, la secuencia tendrá hasta ese número de elementos. Si la variable es más corta que la longitud, sólo estarán presentes los elementos disponibles de la variable. Si la longitud es negativa, la secuencia se detendrá a esa cantidad de elementos del final de la variable. Si se omite, entonces la secuencia tendrá todo desde offset hasta el final de la variable.
Filter reordenará y restablecerá las claves de la matriz de enteros por defecto. Este comportamiento puede cambiarse estableciendo preserveKeys a true. Las claves de cadena siempre se conservan, independientemente de este parámetro.
sort
Filtro que ordena un array y mantiene la asociación de índices.
{foreach ($names|sort) as $name}
...
{/foreach}
Matriz ordenada en orden inverso.
{foreach ($names|sort|reverse) as $name}
...
{/foreach}
Puede pasar su propia función de comparación como parámetro:
{var $sorted = ($names|sort: fn($a, $b) => $b <=> $a)}
spaceless
Elimina los espacios en blanco innecesarios de la salida. También puede utilizar el alias strip
.
{block |spaceless}
<ul>
<li>Hello</li>
</ul>
{/block}
Imprime:
<ul> <li>Hello</li> </ul>
stripHtml
Convierte HTML en texto sin formato. Es decir, elimina las etiquetas HTML y convierte las entidades HTML en texto.
{='<p>one < two</p>'|stripHtml} {* salidas 'one < two' *}
El texto plano resultante puede contener naturalmente caracteres que representen etiquetas HTML, por ejemplo
'<p>'|stripHtml
se convierte en <p>
. Nunca envíe el texto resultante con
|noescape
, ya que esto puede dar lugar a una vulnerabilidad de seguridad.
substr (int offset, int length = null)
Extrae una porción de una cadena. Este filtro ha sido sustituido por un filtro de trozos.
{$string|substr: 1, 2}
translate (string message, …args)
Traduce expresiones a otros idiomas. Para que el filtro esté disponible, es necesario configurar el traductor. También puede utilizar las etiquetas para la traducción.
<a href="basket">{='Baskter'|translate}</a>
<span>{$item|translate}</span>
trim (string charlist =
" \t\n\r\0\x0B\u{A0}"
)
Elimina los caracteres iniciales y finales, por defecto los espacios en blanco.
{=' I like Latte. '|trim} {* salidas 'I like Latte.' *}
{=' I like Latte.'|trim: '.'} {* salidas ' I like Latte' *}
truncate (int length, string append =
'…'
)
Acorta una cadena a la longitud máxima dada, pero intenta conservar las palabras enteras. Si la cadena está truncada, añade elipsis al final (esto puede cambiarse con el segundo parámetro).
{var $title = 'Hello, how are you?'}
{$title|truncate:5} {* Hell… *}
{$title|truncate:17} {* Hello, how are… *}
{$title|truncate:30} {* Hello, how are you? *}
upper
Convierte un valor a mayúsculas. Requiere la extensión PHP mbstring
.
{='latte'|upper} {* salidas 'LATTE' *}
Vea también capitalize, firstUpper, lower.
webalize
Convierte a ASCII.
Convierte los espacios en guiones. Elimina caracteres que no sean alfanuméricos, guiones bajos o guiones. Convierte a minúsculas. También elimina los espacios en blanco iniciales y finales.
{var $s = 'Our 10. product'}
{$s|webalize} {* salidas 'our-10-product' *}
Requiere el paquete nette/utils.