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 y la hora
explode divide una cadena por el delimitador dado
first devuelve el primer elemento de una matriz o carácter de una cadena
group agrupa los datos según varios criterios
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
localDate formatea la fecha y la hora según la configuración regional
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 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.

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>

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 &amp; 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 *}

Ver también floor, round.

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' *}

Ver también last, random.

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 *}

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}  {* 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' *}

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}

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 / MMMMMMM 8 / 08 / agoagosto
Día d / dd / EEEEE 1 / 01 / domdomingo
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: &lt;b&gt;hello&lt;/b&gt;
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&amp;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' *}

Véase también first, last.

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 *}

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}           {* 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 &lt; two</p>'|stripHtml}  {* salidas '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, 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.

versión: 3.0