Funciones de Latte

Además de las funciones habituales de PHP, en las plantillas puede usar también estas funciones.

clamp acota un valor al rango indicado
divisibleBy comprueba si una variable es divisible por un número
even comprueba si el número indicado es par
first devuelve el primer elemento de un array o el primer carácter de una cadena
group agrupa datos según distintos criterios
hasBlock detecta la existencia de un bloque
hasTemplate detecta la existencia de una plantilla
last devuelve el último elemento de un array o el último carácter de una cadena
odd comprueba si el número indicado es impar
slice extrae una porción de un array o una cadena

Uso

Las funciones se usan igual que las funciones habituales de PHP y pueden emplearse en todas las expresiones:

<p>{clamp($num, 1, 100)}</p>

{if odd($num)} ... {/if}

Las funciones personalizadas se pueden registrar así:

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

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

<p>{shortify($text)}</p>
<p>{shortify($text, 100)}</p>

Funciones

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

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

{=clamp($level, 0, 255)}

Véase también el filtro clamp.

divisibleBy (int $value, int $by)bool

Comprueba si una variable es divisible por un número.

{if divisibleBy($num, 5)} ... {/if}

even (int $value): bool

Comprueba si el número indicado es par.

{if even($num)} ... {/if}

first (string|iterable $value)mixed

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

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

Véase también last(), filtro first.

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

Esta función 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 group($items, categoryId) as $categoryId => $categoryItems}
    <ul>
        {foreach $categoryItems as $item}
            <li>{$item->name}</li>
        {/foreach}
    </ul>
{/foreach}

Véase también el filtro group.

hasBlock (string $name): bool

Comprueba si existe un bloque con el nombre indicado:

{if hasBlock(header)} ... {/if}

Véase también comprobación de la existencia de un bloque.

hasTemplate (string $name)bool

Determina si existe una plantilla con el nombre indicado:

{if hasTemplate('foo.latte')} ... {/if}

last (string|array $value)mixed

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

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

Véase también first(), filtro last.

odd (int $value): bool

Comprueba si el número indicado es impar.

{if odd($num)} ... {/if}

slice (string|iterable $value, int $start, ?int $length=null, bool $preserveKeys=false): string|array|\Generator

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

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

La función funciona como la función de PHP array_slice para los arrays o mb_substr para las cadenas, con recurso a la función iconv_substr en modo UTF‑8. Si la entrada es un iterador general, se convierte en un generador que va devolviendo los elementos de la porción.

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, la función 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.

versión: 3.x