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>
Ver también grupo y etiqueta iterateWhile.
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 el tamaño en bytes de forma legible. Si se establece la configuración regional, se utilizan los separadores decimales y de miles correspondientes.
{$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)
Formatea la fecha y la hora según la máscara utilizada por la función de PHP date. El
filtro acepta la fecha en formato UNIX timestamp, como cadena o como objeto DateTimeInterface
.
{$today|date:'j. n. Y'}
Véase también localDate.
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.
group (string|int|\Closure $by): array
El filtro agrupa los datos según diferentes criterios.
En este ejemplo, las filas de la tabla se agrupan por la columna categoryId
. La salida es un array de arrays donde
la clave es el valor de la columna categoryId
. Lea las instrucciones detalladas.
{foreach ($items|group: categoryId) as $categoryId => $categoryItems}
<ul>
{foreach $categoryItems as $item}
<li>{$item->name}</li>
{/foreach}
</ul>
{/foreach}
Véase también batch, la función group y la etiqueta iterateWhile.
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}
localDate (?string $format=null, ?string $date=null, ?string $time=null)
Formatea la fecha y la hora de acuerdo con la configuración
regional, lo que garantiza una visualización coherente y localizada de los datos de la hora en diferentes idiomas y regiones.
El filtro acepta la fecha como marca de tiempo UNIX, cadena u objeto DateTimeInterface
.
{$date|localDate} {* 15. dubna 2024 *}
{$date|format: yM} {* 4/2024 *}
{$date|localDate: date: medium} {* 15. 4. 2024 *}
Si utiliza el filtro sin ningún parámetro, mostrará la fecha en el nivel de formato largo, como se explica más adelante.
a) Utilización del formato
El parámetro format
describe qué componentes horarios deben mostrarse. Utiliza códigos de letras, en los que el
número de repeticiones afecta a la anchura de la salida:
Año | y / yy / yyyy |
2024 / 24 / 2024 |
Mes | M / MM / MMM , MMMM |
8 / 08 / ago / agosto |
Día | d / dd / E / EEEE |
1 / 01 / dom / domingo |
Hora | j / H / h |
preferido / 24 horas / 12 horas |
Minuto | m / mm |
5 / 05 (2 dígitos cuando se combinan con segundos) |
Segundo | s / ss |
8 / 08 (2 dígitos cuando se combinan con minutos) |
El orden de los códigos en el formato no importa, ya que el orden de los componentes se mostrará según las convenciones de
la configuración regional. Por lo tanto, el formato es independiente de la configuración regional. Por ejemplo, el formato
yyyyMMMMd
en la localización en_US
produce April 15, 2024
, mientras que en la
localización cs_CZ
produce 15. dubna 2024
:
locale: | es-ES | en_US |
---|---|---|
format: 'dMy' |
10/8/2024 | 8/10/2024 |
format: 'yM' |
8/2024 | 8/2024 |
format: 'yyyyMMMM' |
agosto de 2024 | August 2024 |
format: 'MMMM' |
agosto | August |
format: 'jm' |
17:54 | 5:54 PM |
format: 'Hm' |
17:54 | 17:54 |
format: 'hm' |
5:54 p. m. | 5:54 PM |
b) Utilización de estilos predefinidos
Los parámetros date
y time
determinan el nivel de detalle de la visualización de la fecha y la
hora. Puede elegir entre varios niveles: full
, long
, medium
, short
. Puede
mostrar sólo la fecha, sólo la hora o ambas:
locale: | es-ES | en_US |
---|---|---|
date: short |
23/1/78 | 1/23/78 |
date: medium |
23 ene 1978 | Jan 23, 1978 |
date: long |
23 de enero de 1978 | January 23, 1978 |
date: full |
lunes, 23 de enero de 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 CET | 8:30:59 AM GMT+1 |
date: short, time: short |
23/1/78, 8:30 | 1/23/78, 8:30 AM |
date: medium, time: short |
23 ene 1978, 8:30 | Jan 23, 1978, 8:30 AM |
date: long, time: short |
23 de enero de 1978, 8:30 | January 23, 1978 at 8:30 AM |
Para la fecha, también puede utilizar el prefijo relative-
(por ejemplo, relative-short
), que para
fechas cercanas al presente mostrará yesterday
, today
, o tomorrow
; de lo contrario, se
mostrará de la forma estándar.
{$date|localDate: date: relative-short} {* yesterday *}
Véase también fecha.
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 el número de decimales especificado. Si se establece la configuración regional, se utilizan los separadores decimales y de miles correspondientes.
{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)
El parámetro format
le permite definir la apariencia de los números exactamente según sus necesidades. Requiere
una configuración regional establecida. El formato consta de varios
caracteres especiales, cuya descripción completa puede encontrarse en la documentación DecimalFormat:
- <c id=6/> dígito obligatorio, se muestra siempre aunque sea cero
#
dígito opcional, se muestra sólo si el número tiene un dígito en ese lugar@
dígito significativo, ayuda a mostrar el número con un cierto número de dígitos significativos.
marca dónde debe estar el separador decimal (coma o punto, según la configuración regional),
se utiliza para separar grupos de dígitos, normalmente miles%
multiplica el número por 100 y añade el signo de porcentaje
Veamos algunos ejemplos. En el primer ejemplo, los dos decimales son obligatorios; en el segundo, son opcionales. El tercer ejemplo muestra relleno con ceros a ambos lados, y el cuarto muestra sólo los dígitos existentes:
{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 *}
Los dígitos significativos determinan cuántos dígitos, independientemente del punto decimal, deben mostrarse, redondeando el número si es necesario:
{1234|number: '@@'} {* 1200 *}
{1234|number: '@@@'} {* 1230 *}
{1234|number: '@@@#'} {* 1234 *}
{1.2345|number: '@@@'} {* 1.23 *}
{0.00123|number: '@@'} {* 0.0012 *}
Una forma sencilla de mostrar un número como porcentaje. El número se multiplica por 100 y se añade el signo
%
:
{0.1234|number: '#.##%'} {* 12.34% *}
Podemos definir un formato diferente para los números positivos y negativos, separados por un carácter ;
. Así,
por ejemplo, los números positivos pueden mostrarse con el signo +
:
{42|number: '#.##;(#.##)'} {* 42 *}
{-42|number: '#.##;(#.##)'} {* (42) *}
{42|number: '+#.##;-#.##'} {* +42 *}
{-42|number: '+#.##;-#.##'} {* -42 *}
Recuerde que el aspecto real de los números puede variar en función de la configuración regional. Por ejemplo, en algunos países se utiliza una coma en lugar de un punto como separador decimal. Este filtro lo tiene en cuenta automáticamente, así que no tienes que preocuparte por ello.
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 (?Closure $comparison, string|int|\Closure|null $by=null, string|int|\Closure|bool $byKey=false)
El filtro ordena los elementos de un array o iterador conservando sus claves asociativas. Cuando se establece una configuración regional, la ordenación sigue sus reglas a menos que se especifique una función de comparación personalizada.
{foreach ($names|sort) as $name}
...
{/foreach}
Matriz ordenada en orden inverso.
{foreach ($names|sort|reverse) as $name}
...
{/foreach}
Puede especificar una función de comparación personalizada para la ordenación (el ejemplo muestra cómo invertir la ordenación de mayor a menor):
{var $reverted = ($names|sort: fn($a, $b) => $b <=> $a)}
El filtro |sort
también permite ordenar los elementos por clave:
{foreach ($names|sort: byKey: true) as $name}
...
{/foreach}
Si necesita ordenar una tabla por una columna específica, puede utilizar el parámetro by
. El valor
'name'
en el ejemplo especifica que la ordenación se realizará por $row->name
o
$row['name']
dependiendo de si $row
es una matriz o un objeto:
{foreach ($items|sort: by: 'name') as $item}
{$item->name}
{/foreach}
También puede definir una función de devolución de llamada que determine el valor por el que se ordenará:
{foreach ($items|sort: by: fn($items) => $items->category->name) as $item}
{$item->name}
{/foreach}
El parámetro byKey
se puede utilizar de la misma manera.
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.