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.

Transformación de cadenas / matrices
batch Listado de datos lineales en una tabla
breakLines Inserta saltos de línea HTML antes de todas las nuevas líneas
bytes formatea el tamaño en bytes
clamp sujeta el valor al rango
dataStream Conversión de protocolo URI de datos
date Formatea la fecha
explode divide una cadena por el delimitador dado
first devuelve el primer elemento de una matriz o carácter de una cadena
implode une una matriz a una cadena
indent sangrar el texto desde la izquierda con un número de tabulaciones
join une una matriz con una cadena
last devuelve el último elemento de la matriz o carácter de la cadena
length devuelve la longitud de una cadena o matriz
number Formatea un número
padLeft completa la cadena a la longitud dada desde la izquierda
padRight completa la cadena a la longitud dada desde la derecha
random devuelve un elemento aleatorio de una matriz o un carácter de una cadena
repeat repite la cadena
replace reemplaza todas las ocurrencias de la cadena buscada con el reemplazo
replaceRE reemplaza todas las apariciones según la expresión regular
reverse invierte una cadena o matriz UTF-8
slice Extrae una porción de una matriz o cadena
sort ordena una matriz
spaceless Elimina espacios en blanco, similar a la etiqueta sin espacios.
split divide una cadena por el delimitador dado
strip elimina los espacios en blanco
stripHtml elimina etiquetas HTML y convierte entidades HTML en texto
substr devuelve parte de la cadena
trim elimina los espacios en blanco de la cadena
translate traducción a otros idiomas
truncate acorta la longitud conservando palabras enteras
webalize ajusta la cadena UTF-8 a la forma utilizada en la URL
Mayúsculas
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
Redondeo de números
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
Escape
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 escape para HTML (escapeHtml y escapeHtmlComment), XML (escapeXml), JavaScript (escapeJs), CSS (escapeCss) e iCalendar (escapeICal), que Latte utiliza por sí mismo gracias al escape consciente del contexto y no es necesario escribirlos.

Seguridad
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}    {* outputs "Text &amp; 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}         {* outputs 4      *}
{=135.22|ceil:1}    {* outputs 135.3  *}
{=135.22|ceil:3}    {* outputs 135.22 *}

Ver también floor, round.

capitalize

Devuelve una versión del valor en mayúsculas. Las palabras comenzarán con mayúsculas, todos los caracteres restantes en minúsculas. Requiere la extensión PHP mbstring.

{='i like LATTE'|capitalize}  {* outputs 'I Like Latte' *}

Vea también firstUpper, lower, upper.

checkUrl

Aplica la desinfección 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 strftimedate. 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}    {* outputs 1 *}
{='abcd'|first}          {* outputs 'a' *}

Ver también last, random.

floor (int precision = 0)

Redondea un número a una precisión dada.

{=3.5|floor}        {* outputs 3      *}
{=135.79|floor:1}   {* outputs 135.7  *}
{=135.79|floor:3}   {* outputs 135.79 *}

Ver también ceil, round.

firstUpper

Convierte la primera letra de un valor a mayúsculas. Requiere la extensión PHP mbstring.

{='the latte'|firstUpper}  {* outputs '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}      {* outputs '123' *}
{=[1, 2, 3]|implode:'|'}  {* outputs '1|2|3' *}

También puede utilizar un alias join:

{=[1, 2, 3]|join}         {* outputs '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}    {* outputs 4 *}
{='abcd'|last}          {* outputs 'd' *}

Ver también first, random.

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}   {* outputs '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: &lt;b&gt;hello&lt;/b&gt;
Unescaped: <b>hello</b>

¡El mal uso del filtro noescape puede conducir 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 determinado 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&amp;age=43">click</a>
<a href="http://example.com/?search=Foo+Bar">search</a>

Las teclas con 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' *}

Véase también first, last.

repeat (int count)

Repite la cadena x veces.

{='hello'|repeat: 3}  {* outputs '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'}  {* outputs 'hello friend' *}

Se pueden realizar varias sustituciones a la vez:

{='hello world'|replace: [h => l, l => h]}  {* outputs 'lehho worhd' *}

replaceRE (string pattern, string replace = '')

Reemplaza todas las ocurrencias según la expresión regular.

{='hello world'|replaceRE: '/l.*/', 'l'}  {* outputs 'hel' *}

reverse

Invierte la cadena o matriz dada.

{var $s = 'Nette'}
{$s|reverse}    {* outputs '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}        {* outputs 3      *}
{=3.5|round}        {* outputs 4      *}
{=135.79|round:1}   {* outputs 135.8  *}
{=135.79|round:3}   {* outputs 135.79 *}

Ver también ceil, floor.

slice (int start, int length = null, bool preserveKeys = false)

Extrae una porción de una matriz o una cadena.

{='hello'|slice: 1, 2}           {* outputs 'el' *}
{=['a', 'b', 'c']|slice: 1, 2}   {* outputs ['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 &lt; two</p>'|stripHtml}  {* outputs 'one < two' *}

El texto plano resultante puede contener naturalmente caracteres que representen etiquetas HTML, por ejemplo '&lt;p&gt;'|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, debe 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}    {* outputs 'I like Latte.' *}
{='  I like Latte.'|trim: '.'} {* outputs '  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}  {* outputs '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}    {* outputs 'our-10-product' *}

Requiere el paquete nette/utils.