Filtros de Latte

En las plantillas podemos usar funciones que ayudan a modificar o dar formato a los datos hasta su forma final. Las llamamos filtros.

Transformación
batch muestra datos lineales en forma de tabla
breakLines inserta saltos de línea HTML antes de cada salto de línea
bytes da formato a un tamaño en bytes
clamp acota un valor al rango indicado
column extrae una sola columna de un array
commas une un array con comas
limit limita la longitud de un array, una cadena o un iterador
dataStream conversión al protocolo Data URI
date da formato a la fecha y la hora
explode divide una cadena en un array por un delimitador
filter filtra los elementos de un iterable con un predicado
first devuelve el primer elemento de un array o el primer carácter de una cadena
group agrupa datos según distintos criterios
implode une un array en una cadena
indent sangra el texto por la izquierda un número dado de tabuladores
join une un array en una cadena
last devuelve el último elemento de un array o el último carácter de una cadena
length devuelve la longitud de una cadena o un array
localDate da formato a la fecha y la hora según la configuración regional
map aplica un callback a cada elemento
number da formato a un número
padLeft rellena una cadena hasta cierta longitud por la izquierda
padRight rellena una cadena hasta cierta longitud por la derecha
random devuelve un elemento aleatorio de un array o un carácter aleatorio de una cadena
repeat repite una cadena
replace sustituye las apariciones de la cadena buscada
replaceRE sustituye apariciones según una expresión regular
reverse invierte una cadena UTF‑8 o un array
slice extrae una porción de un array o una cadena
sort ordena un array
spaceless elimina los espacios en blanco, similar a la etiqueta spaceless
split divide una cadena en un array por un delimitador
strip elimina los espacios en blanco, alias obsoleto de spaceless
stripHtml elimina las etiquetas HTML y convierte las entidades HTML en caracteres
substr devuelve parte de una cadena
trim elimina espacios u otros caracteres del principio y del final
translate traducción a otros idiomas
truncate acorta la longitud conservando palabras enteras
webalize adapta una cadena UTF‑8 al formato usado en las URL
Mayúsculas y minúsculas
capitalize minúsculas, con la primera letra de cada palabra en mayúscula
firstLower convierte la primera letra a minúscula
firstUpper convierte la primera letra a mayúscula
lower convierte a minúsculas
upper convierte a mayúsculas
Redondeo
ceil redondea un número hacia arriba con la precisión indicada
floor redondea un número hacia abajo con la precisión indicada
round redondea un número con la precisión indicada
Atributos HTML
accept acepta el nuevo comportamiento de los atributos inteligentes
toggle alterna la presencia de un atributo HTML
Escapado
escapeUrl escapa un parámetro en una URL
noescape imprime una variable sin escapar
query genera una query string en una URL

Existen además filtros de escapado para HTML (escapeHtml y escapeHtmlComment), XML (escapeXml), JavaScript (escapeJs), CSS (escapeCss) e iCalendar (escapeICal), que Latte usa por sí mismo gracias al escapado sensible al contexto y que usted no necesita escribir.

Seguridad
checkUrl limpia una URL de entradas peligrosas
nocheck impide la limpieza automática de la URL

Latte comprueba automáticamente los atributos src y href, así que casi no necesita usar el filtro checkUrl.

Todos los filtros integrados están pensados para cadenas en codificación UTF‑8.

Uso

Los filtros se escriben tras el símbolo de tubería (se admite un espacio delante):

<h1>{$heading|upper}</h1>

Los filtros se pueden encadenar y se aplican en orden de izquierda a derecha:

<h1>{$heading|lower|capitalize}</h1>

Los parámetros se indican tras el nombre del filtro, separados por dos puntos o comas:

<h1>{$heading|truncate:20,''}</h1>

Los filtros también se pueden aplicar a una expresión:

{var $name = ($title|upper) . ($subtitle|lower)}

Los filtros personalizados se pueden registrar así:

$latte = new Latte\Engine;
$latte->addFilter('shortify', fn(string $s, int $len = 10) => mb_substr($s, 0, $len));

Después se llaman en la plantilla de este modo:

<p>{$text|shortify}</p>
<p>{$text|shortify:100}</p>

Filtros nullsafe

Cualquier filtro se puede hacer nullsafe usando ?| en lugar de |. Si el valor es null, el filtro no se ejecuta y se devuelve null. Los filtros siguientes de la cadena también se omiten.

Esto resulta útil en combinación con los atributos HTML, que se omiten si el valor es null.

<div title={$title?|upper}>
{* Si $title es null: <div> *}
{* Si $title es 'hello': <div title="HELLO"> *}

Filtros

accept

El filtro se usa durante la migración desde Latte 3.0 para confirmar que ha revisado el cambio de comportamiento del atributo y lo acepta. No modifica el valor.

Es una herramienta temporal. Una vez completada la migración y desactivadas las advertencias de migración, debería eliminar este filtro de sus plantillas.

batch (int $length, mixed $rest=null): Generator

Filtro que simplifica mostrar datos lineales en forma de tabla. Devuelve un generador de arrays con el número de elementos indicado. Si proporciona un segundo parámetro, se usará para rellenar los elementos que falten 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>

Vea también group y la etiqueta iterateWhile.

breakLines

Inserta una etiqueta HTML <br> antes de cada carácter de salto de línea.

{var $s = "Text & with \n newline"}
{$s|breakLines}    {* muestra "Text &amp; with <br>\n newline" *}

bytes (int $precision=2)

Da formato a un tamaño en bytes en una forma legible para el ser humano. Si está definida la configuración regional, se usan los separadores decimales y de millares correspondientes.

{$size|bytes}     {* 0 B, 1.25 GB, … *}
{$size|bytes:0}   {* 10 B, 1 GB, … *}

ceil (int $precision=0)

Redondea un número hacia arriba con la precisión indicada.

{=3.4|ceil}         {* muestra 4      *}
{=135.22|ceil:1}    {* muestra 135.3  *}
{=135.22|ceil:3}    {* muestra 135.22 *}

Vea también floor, round.

capitalize

Las palabras empezarán con letra mayúscula y el resto de caracteres quedarán en minúscula. Requiere la extensión mbstring de PHP.

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

Vea también firstLower, firstUpper, lower, upper.

checkUrl

Fuerza la limpieza de la URL. Comprueba si la URL usa un esquema seguro (http, https, ftp, mailto, tel, sms) o es un enlace relativo, y bloquea los esquemas peligrosos, como javascript:, que podrían suponer un riesgo de 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>

Vea también nocheck.

clamp (int|float $min, int|float $max)

Acota un valor al rango inclusivo indicado por min y max.

{$level|clamp: 0, 255}

Existe también como función.

column (string|int|null $columnKey, string|int|null $indexKey=null)

Devuelve como un array nuevo los valores de una sola columna $columnKey de un array multidimensional. También se puede usar con arrays de objetos para extraer los valores de una propiedad.

{var $users = [
	[id: 30, name: 'John', age: 30],
	[id: 32, name: 'Jane', age: 25],
	[id: 33, age: 35],
]}

{$users|column: 'name'}
{* devuelve ['John', 'Jane'] *}

{$users|column: 'name', 'id'}
{* devuelve [30 => 'John', 32 => 'Jane'] *}

Si pasa null como clave de columna, reindexará el array según $indexKey.

commas (?string $lastGlue=null)

Une los elementos de un array con coma y espacio (', '). Un atajo cómodo para enumerar elementos en un formato legible.

{var $items = ['apples', 'oranges', 'bananas']}
{$items|commas}
{* muestra 'apples, oranges, bananas' *}

También puede indicar un separador propio para el último par de elementos:

{$items|commas: ' and '}
{* muestra 'apples, oranges and bananas' *}

{=['PHP', 'JavaScript', 'Python']|commas: ', or '}
{* muestra 'PHP, JavaScript, or Python' *}

Vea también implode.

dataStream (?string $type=null)

Convierte el contenido al esquema data URI. Esto permite incrustar imágenes en HTML o CSS sin necesidad de enlazar archivos externos. Si $type es null, el tipo MIME se detecta automáticamente.

Supongamos que tenemos una imagen en la variable $img = Image::fromFile('image.gif'), entonces

<img src={$img|dataStream}>

Imprime, por ejemplo:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==">

Requiere la extensión fileinfo de PHP.

date (string $format='j. n. Y')

Da formato a una fecha y una hora según la máscara que usa la función de PHP date. El filtro acepta la fecha como marca de tiempo UNIX, como cadena, como DateTimeInterface o como objeto DateInterval.

{$today|date:'j. n. Y'}

Vea también localDate.

escapeUrl

Escapa una variable para usarla como parámetro en una URL.

<a href="http://example.com/{$name|escapeUrl}">{$name}</a>

Vea también query.

explode (string $separator='')

Divide una cadena en un array por un delimitador. Alias de split.

{='one,two,three'|explode:','}    {* devuelve ['one', 'two', 'three'] *}

Si el delimitador es una cadena vacía (el valor predeterminado), la entrada se dividirá en caracteres sueltos:

{='123'|explode}                  {* devuelve ['1', '2', '3'] *}

También puede usar el alias split:

{='1,2,3'|split:','}              {* devuelve ['1', '2', '3'] *}

Vea también implode.

filter (callable $predicate): iterable

Filtra los elementos de un array o un iterador y conserva solo aquellos para los que el predicado devuelve true. Las claves se conservan.

{foreach ($people|filter: fn($person) => $person->age >= 18) as $adult}
	<p>{$adult->name}</p>
{/foreach}

first

Devuelve el primer elemento de un array o el primer carácter de una cadena:

{=[1, 2, 3, 4]|first}    {* muestra 1 *}
{='abcd'|first}          {* muestra 'a' *}

Vea también last, random.

floor (int $precision=0)

Redondea un número hacia abajo con la precisión indicada.

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

Vea también ceil, round.

firstLower

Convierte la primera letra a minúscula. Requiere la extensión mbstring de PHP.

{='The Latte'|firstLower}  {* muestra 'the Latte' *}

Vea también capitalize, firstUpper, lower, upper.

firstUpper

Convierte la primera letra a mayúscula. Requiere la extensión mbstring de PHP.

{='the latte'|firstUpper}  {* muestra 'The latte' *}

Vea también capitalize, firstLower, lower, upper.

group (string|int|\Closure $by): iterable

El filtro agrupa los datos según distintos criterios.

En este ejemplo, las filas de la tabla se agrupan por la columna categoryId. La salida es una estructura iterable de grupos, donde la clave es el valor de la columna categoryId. Lea la guía detallada.

{foreach ($items|group: categoryId) as $categoryId => $categoryItems}
    <ul>
        {foreach $categoryItems as $item}
            <li>{$item->name}</li>
        {/foreach}
    </ul>
{/foreach}

Vea también batch, la función group y la etiqueta iterateWhile.

implode (string $glue='')

Devuelve una cadena resultante de concatenar los elementos de la secuencia. Alias de join.

{=[1, 2, 3]|implode}      {* muestra '123' *}
{=[1, 2, 3]|implode:'|'}  {* muestra '1|2|3' *}

También puede usar el alias join:

{=[1, 2, 3]|join}         {* muestra '123' *}

Vea también commas, explode.

indent (int $level=1, string $chars="\t")

Sangra el texto por la izquierda un número dado de tabuladores u otros caracteres indicados en el segundo argumento. Las líneas vacías no se sangran.

<div>
{block |indent}
<p>Hello</p>
{/block}
</div>

Imprime:

<div>
	<p>Hello</p>
</div>

last

Devuelve el último elemento de un array o el último carácter de una cadena:

{=[1, 2, 3, 4]|last}    {* muestra 4 *}
{='abcd'|last}          {* muestra 'd' *}

Vea también first, random.

length

Devuelve la longitud de una cadena o un array.

  • para las cadenas, devuelve la longitud en caracteres UTF‑8
  • para los arrays, devuelve el número de elementos
  • para los objetos que implementan la interfaz Countable, usa el valor devuelto por el método count()
  • para los objetos que implementan la interfaz Traversable, usa el valor devuelto por la función iterator_count()
{if ($users|length) > 10}
	...
{/if}

localDate (?string $format=null, ?string $date=null, ?string $time=null)

Da formato a la fecha y la hora según la configuración regional, lo que garantiza una presentación coherente y localizada de los datos temporales en distintos idiomas y regiones. El filtro acepta la fecha como marca de tiempo UNIX, como cadena o como objeto DateTimeInterface.

{$date|localDate}                  {* 15 de abril de 2024 *}
{$date|localDate: format: yM}      {* 4/2024 *}
{$date|localDate: date: medium}    {* 15 abr 2024 *}

Si usa el filtro sin parámetros, imprimirá la fecha en el nivel long, véase más abajo.

a) Usando format

El parámetro format describe qué componentes temporales deben mostrarse. Usa códigos de letra, donde el número de repeticiones influye en la anchura de la salida:

Año y / yy / yyyy 2024 / 24 / 2024
Mes M / MM / MMMMMMM 8 / 08 / AugAugust
Día d / dd / EEEEE 1 / 01 / SunSunday
Hora j / H / h preferida / 24 horas / 12 horas
Minuto m / mm 5 / 05 (2 dígitos combinado con los segundos)
Segundo s / ss 8 / 08 (2 dígitos combinado con los minutos)

El orden de los códigos en el formato no importa, porque el orden de los componentes se mostrará según las convenciones de la configuración regional. El formato es, por tanto, independiente de esta. Por ejemplo, el formato yyyyMMMMd imprime April 15, 2024 en la configuración en_US, mientras que en cs_CZ imprime 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) Usando estilos predefinidos

Los parámetros date y time determinan con cuánto detalle deben mostrarse la fecha y la hora. Puede elegir entre varios niveles: full, long, medium, short. Puede mostrar solo la fecha, solo la hora o ambas:

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

Para la fecha puede usar además el prefijo relative- (por ejemplo, relative-short), que en las fechas cercanas al presente mostrará ayer, hoy o mañana; en los demás casos, la mostrará de la forma habitual.

{$date|localDate: date: relative-short}    {* ayer *}

Vea también date.

lower

Convierte una cadena a minúsculas. Requiere la extensión mbstring de PHP.

{='LATTE'|lower}   {* muestra 'latte' *}

Vea también capitalize, firstLower, firstUpper, upper.

map (callable $transformer): iterable

Transforma cada elemento de un array o un iterador mediante un callback y devuelve un iterador nuevo. Es la contraparte del filtro filter. Las claves se conservan.

{=($users|map: fn($user) => $user->name)|implode: ', '}   {* John, Mary, Paul *}

Vea también filter.

nocheck

Impide la limpieza automática de la URL. Latte comprueba automáticamente si una URL usa un esquema seguro (como http, https, ftp, mailto, tel, sms) o es un enlace relativo, y bloquea los potencialmente peligrosos.

Si el enlace usa otro esquema, como javascript: o data:, y está seguro de su contenido, puede desactivar la comprobación con |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>

Vea también checkUrl.

noescape

Desactiva el escapado 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>

¡Un uso indebido del filtro noescape puede provocar una vulnerabilidad XSS! No lo use nunca salvo que esté absolutamente seguro de lo que hace y de que la cadena que imprime procede de una fuente confiable.

number (int $decimals=0, string $decPoint='.', string $thousandsSep=',')

Da formato a un número con el número de decimales indicado. Si está definida la configuración regional, se usan los separadores decimales y de millares 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 el aspecto de los números exactamente según sus necesidades. Para ello es necesario que esté definida la configuración regional. El formato consta de varios caracteres especiales, cuya descripción completa encontrará en la documentación de DecimalFormat:

  • 0 dígito obligatorio, se muestra siempre aunque sea cero
  • # dígito opcional, se muestra solo si el número tiene realmente un dígito en ese lugar
  • @ dígito significativo, ayuda a mostrar el número con cierto número de dígitos significativos
  • . indica dónde debe ir el separador decimal (punto o coma, según el país)
  • , sirve para separar grupos de dígitos, casi siempre los millares
  • % multiplica el número por 100 y añade el signo de porcentaje

Veamos algunos ejemplos. En el primero, los dos decimales son obligatorios; en el segundo, opcionales. El tercer ejemplo muestra el relleno con ceros por la izquierda y por la derecha; el cuarto muestra solo 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, con independencia de la coma decimal, deben mostrarse, redondeando si hace falta:

{1234|number: '@@'}             {* 1200 *}
{1234|number: '@@@'}            {* 1230 *}
{1234|number: '@@@#'}           {* 1234 *}
{1.2345|number: '@@@'}          {* 1.23 *}
{0.00123|number: '@@'}          {* 0.0012 *}

Una forma fácil 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 distinto para los números positivos y los negativos, separados por el 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 según la configuración del país. Por ejemplo, en algunos países se usa una coma en lugar de un punto como separador decimal. Este filtro lo tiene en cuenta automáticamente, así que no tiene que preocuparse por ello.

padLeft (int $length, string $append=' ')

Rellena una cadena o un número hasta cierta longitud con otra cadena por la izquierda.

{='hello'|padLeft: 10, '123'}  {* muestra '12312hello' *}
{=123|padLeft: 5, '0'}         {* muestra '00123' *}

padRight (int $length, string $append=' ')

Rellena una cadena o un número hasta cierta longitud con otra cadena por la derecha.

{='hello'|padRight: 10, '123'}  {* muestra 'hello12312' *}
{=123|padRight: 5, '0'}         {* muestra '12300' *}

query

Genera dinámicamente una query string en una 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 claves con valor null se omiten.

Vea también escapeUrl.

random

Devuelve un elemento aleatorio de un array o un carácter aleatorio de una cadena:

{=[1, 2, 3, 4]|random}    {* muestra p. ej.: 3 *}
{='abcd'|random}          {* muestra p. ej.: 'b' *}

Vea también first, last.

repeat (int $count)

Repite la cadena x veces.

{='hello'|repeat: 3}  {* muestra 'hellohellohello' *}

replace (string|array $search, string|array $replace='')

Sustituye todas las apariciones de la cadena buscada por la cadena de sustitución.

{='hello world'|replace: 'world', 'friend'}  {* muestra 'hello friend' *}

Se pueden hacer varias sustituciones a la vez:

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

replaceRE (string $pattern, string $replacement='')

Realiza una búsqueda y sustitución con una expresión regular.

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

reverse (bool $preserveKeys=false)

Invierte la cadena o el array indicados.

{var $s = 'Nette'}
{$s|reverse}    {* muestra 'etteN' *}
{var $a = ['N', 'e', 't', 't', 'e']}
{$a|reverse}    {* devuelve ['e', 't', 't', 'e', 'N'] *}

round (int $precision=0)

Redondea un número con la precisión indicada.

{=3.4|round}        {* muestra 3      *}
{=3.5|round}        {* muestra 4      *}
{=135.79|round:1}   {* muestra 135.8  *}
{=135.79|round:3}   {* muestra 135.79 *}

Vea también ceil, floor.

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

Extrae una porción de un array, una cadena o un iterador.

{='hello'|slice: 1, 2}           {* muestra 'el' *}
{=['a', 'b', 'c']|slice: 1, 2}   {* muestra ['b', 'c'] *}

El filtro funciona como la función de PHP array_slice para los arrays o mb_substr para las cadenas. Para los iteradores devuelve un generador: los elementos se consumen del origen uno a uno y la lectura se detiene al alcanzar el límite. El iterador entero nunca se carga en memoria.

Si start es no negativo, la secuencia empezará en ese desplazamiento desde el principio del array o la cadena. Si start es negativo, la secuencia empezará a esa distancia del final.

Si se indica length y es positivo, la secuencia tendrá como máximo ese número de elementos. Si la entrada es más corta que length, solo estarán los elementos disponibles. Si se indica length y es negativo, la secuencia se detendrá a ese número de elementos del final de la entrada. Si se omite, la secuencia contendrá todo desde start hasta el final de la entrada.

De forma predeterminada, el filtro reordena y reinicia las claves enteras del array. Este comportamiento se puede cambiar poniendo preserveKeys a true. Las claves de tipo cadena se conservan siempre, con independencia de este parámetro.

Vea también limit.

limit (int $length)

Limita la longitud de un array, una cadena o un iterador. En arrays e iteradores se conservan las claves. En las cadenas respeta UTF-8.

{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)

El filtro ordena los elementos de un array o un iterador conservando sus claves asociativas. Cuando hay una configuración regional definida, la ordenación sigue sus reglas, salvo que se indique una función de comparación propia.

{foreach ($names|sort) as $name}
	...
{/foreach}

Array ordenado en orden inverso:

{foreach ($names|sort|reverse) as $name}
	...
{/foreach}

Puede indicar una función de comparación propia para la ordenación (el ejemplo muestra cómo invertir el orden de mayor a menor):

{var $reverted = ($names|sort: fn($a, $b) => $b <=> $a)}

El filtro |sort permite también ordenar los elementos por las claves:

{foreach ($names|sort: byKey: true) as $name}
	...
{/foreach}

Si necesita ordenar una tabla por una columna concreta, puede usar el parámetro by. El valor 'name' del ejemplo indica que la ordenación se hará por $item->name o $item['name'], según $item sea un array o un objeto:

{foreach ($items|sort: by: 'name') as $item}
	{$item->name}
{/foreach}

También puede definir una función callback que determine el valor por el que ordenar:

{foreach ($items|sort: by: fn($item) => $item->category->name) as $item}
	{$item->name}
{/foreach}

El parámetro byKey se puede usar del mismo modo.

spaceless

Elimina los espacios en blanco innecesarios de la salida. También puede usar el alias obsoleto strip, pero se prefiere spaceless.

{block |spaceless}
	<ul>
		<li>Hello</li>
	</ul>
{/block}

Imprime:

<ul><li>Hello</li></ul>

stripHtml

Convierte HTML en texto plano. Es decir, elimina las etiquetas HTML y convierte las entidades HTML en caracteres de texto.

{='<p>one &lt; two</p>'|stripHtml}  {* muestra 'one < two' *}

El texto plano resultante puede contener, naturalmente, caracteres que representan etiquetas HTML; por ejemplo, '&lt;p&gt;'|stripHtml se convierte en <p>. Nunca imprima el texto resultante con |noescape, porque puede provocar una vulnerabilidad de seguridad.

substr (int $start, ?int $length=null)

Extrae una parte de una cadena. Este filtro ha sido sustituido por el filtro slice.

{$string|substr: 1, 2}

toggle

El filtro toggle controla la presencia de un atributo según un valor booleano. Si el valor es verdadero, el atributo está presente; si es falso, el atributo se omite por completo:

<div uk-grid={$isGrid|toggle}>
{* Si $isGrid es truthy: <div uk-grid> *}
{* Si $isGrid es falsy: <div> *}

Este filtro resulta útil para atributos propios o de bibliotecas JavaScript que requieren un control de presencia o ausencia parecido al de los atributos booleanos de HTML.

El filtro solo se puede usar dentro de atributos HTML.

translate (…$args)

Traduce expresiones a otros idiomas. Para que el filtro esté disponible, necesita configurar el traductor. También puede usar las etiquetas de traducción.

<a href="basket">{='Basket'|translate}</a>
<span>{$item|translate}</span>

trim (string $charlist=" \t\n\r\0\x0B\u{A0}")

Elimina los espacios en blanco (u otros caracteres) del principio y del final de una cadena.

{='  I like Latte.  '|trim}    {* muestra 'I like Latte.' *}
{='  I like Latte.'|trim: '.'} {* muestra '  I like Latte' *}

truncate (int $length, string $append='…')

Acorta una cadena hasta la longitud máxima indicada, procurando conservar palabras enteras. Si la cadena se acorta, añade puntos suspensivos al final (se pueden cambiar 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 una cadena a mayúsculas. Requiere la extensión mbstring de PHP.

{='latte'|upper}  {* muestra 'LATTE' *}

Vea también capitalize, firstLower, firstUpper, lower.

webalize

Adapta una cadena UTF‑8 al formato usado en las URL.

Convierte a ASCII. Convierte los espacios en guiones. Elimina los caracteres que no son alfanuméricos, guiones bajos ni guiones. Convierte a minúsculas. Además, elimina los espacios en blanco del principio y del final.

{var $s = 'Our 10th product'}
{$s|webalize}   {* muestra 'our-10th-product' *}

Requiere la biblioteca nette/utils.

versión: 3.x