Nette Documentation Preview

syntax
Sintaxis
********
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Sintaxis

La sintaxis de Latte surgió de los requisitos prácticos de los diseñadores web. Buscamos la sintaxis más amigable con la que pueda escribir elegantemente incluso construcciones que de otro modo serían un verdadero desafío. Al mismo tiempo, todas las expresiones se escriben exactamente igual que en PHP, por lo que no tiene que aprender un nuevo lenguaje. Simplemente aprovecha lo que ya sabe desde hace mucho tiempo.

A continuación se muestra una plantilla mínima que ilustra varios elementos básicos: etiquetas, n:atributos, comentarios y filtros.

{* esto es un comentario *}
<ul n:if=$items>                  {* n:if es un n:atributo *}
{foreach $items as $item}         {* etiqueta que representa el bucle foreach *}
	<li>{$item|capitalize}</li>   {* etiqueta que imprime una variable con un filtro *}
{/foreach}                        {* fin del bucle *}
</ul>

Veamos más de cerca estos elementos importantes y cómo pueden ayudarle a crear una plantilla increíble.

Etiquetas

La plantilla contiene etiquetas que controlan la lógica de la plantilla (por ejemplo, bucles foreach) o imprimen expresiones. Para ambos se utiliza un único delimitador { ... }, por lo que no tiene que pensar qué delimitador usar en qué situación, como ocurre en otros sistemas. Si al carácter { le sigue una comilla o un espacio, Latte no lo considera el inicio de una etiqueta, gracias a lo cual puede usar construcciones JavaScript, JSON o reglas CSS en las plantillas sin problemas.

Vea el resumen de todas las etiquetas. Además, también puede crear sus propias etiquetas personalizadas.

Latte entiende PHP

Dentro de las etiquetas puede usar expresiones PHP que conoce bien:

Latte además complementa la sintaxis de PHP con varias extensiones agradables.

n:atributos

Todas las etiquetas pares, por ejemplo {if} … {/if}, que operan sobre un único elemento HTML, se pueden reescribir en forma de n:atributos. Así se podría escribir, por ejemplo, también el {foreach} en el ejemplo introductorio:

<ul n:if=$items>
	<li n:foreach="$items as $item">{$item|capitalize}</li>
</ul>

La funcionalidad entonces se refiere al elemento HTML en el que se coloca:

{var $items = ['I', '♥', 'Latte']}

<p n:foreach="$items as $item">{$item}</p>

imprime:

<p>I</p>
<p></p>
<p>Latte</p>

Usando el prefijo inner- podemos ajustar el comportamiento para que se refiera solo a la parte interna del elemento:

<div n:inner-foreach="$items as $item">
	<p>{$item}</p>
	<hr>
</div>

Se imprimirá:

<div>
	<p>I</p>
	<hr>
	<p></p>
	<hr>
	<p>Latte</p>
	<hr>
</div>

O usando el prefijo tag- aplicamos la funcionalidad solo a las propias etiquetas HTML:

<p><a href={$url} n:tag-if="$url">Title</a></p>

Lo que imprime dependiendo de la variable $url:

{* cuando $url está vacío *}
<p>Title</p>

{* cuando $url contiene 'https://nette.org' *}
<p><a href="https://nette.org">Title</a></p>

Sin embargo, los n:atributos no son solo un atajo para etiquetas pares. También existen n:atributos puros, como n:href o el muy útil ayudante del codificador n:class.

Filtros

Vea el resumen de filtros estándar.

Los filtros se escriben después de una barra vertical (puede haber un espacio antes de ella):

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

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

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

Los parámetros se introducen después del 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)}

A un bloque:

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

O directamente al valor (en combinación con la etiqueta {=expr}):

<h1>{='  Hello world  '|trim}<h1>

Etiquetas HTML dinámicas

Latte admite etiquetas HTML dinámicas, que son útiles cuando necesita flexibilidad en los nombres de las etiquetas:

<h{$level}>Heading</h{$level}>

El código anterior puede, por ejemplo, generar <h1>Heading</h1> o <h2>Heading</h2> dependiendo del valor de la variable $level. Las etiquetas HTML dinámicas en Latte siempre deben ser pares. Su alternativa es n:tag.

Dado que Latte es un sistema de plantillas seguro, comprueba que el nombre de etiqueta resultante sea válido y no contenga ningún valor no deseado o malicioso. Además, asegura que el nombre de la etiqueta de cierre siempre sea el mismo que el nombre de la etiqueta de apertura.

Comentarios

Los comentarios se escriben de esta manera y no llegan a la salida:

{* esto es un comentario en Latte *}

Dentro de las etiquetas funcionan los comentarios PHP:

{include 'file.info', /* value: 123 */}

Azúcar sintáctico

Cadenas sin comillas

Para cadenas simples se pueden omitir las comillas:

como en PHP:  {var $arr = ['hello', 'btn--default', '€']}

abreviado:    {var $arr = [hello, btn--default,]}

Las cadenas simples son aquellas que están formadas puramente por letras, dígitos, guiones bajos, guiones y puntos. No deben comenzar con un dígito y no deben comenzar ni terminar con un guion. No deben estar compuestas solo por letras mayúsculas y guiones bajos, porque entonces se considera una constante (por ejemplo, PHP_VERSION). Y no deben colisionar con las palabras clave: and, array, clone, default, false, in, instanceof, new, null, or, return, true, xor.

Constantes

Dado que se pueden omitir las comillas en las cadenas simples, recomendamos escribir las constantes globales con una barra inclinada al principio para distinguirlas:

{if \PROJECT_ID === 1} ... {/if}

Esta notación es completamente válida en el propio PHP, la barra inclinada dice que la constante está en el namespace global.

Operador ternario abreviado

Si el tercer valor del operador ternario está vacío, se puede omitir:

como en PHP:  {$stock ? 'En stock' : ''}

abreviado:    {$stock ? 'En stock'}

Notación moderna de claves en array

Las claves en un array se pueden escribir de forma similar a los parámetros nombrados al llamar a funciones:

como en PHP:  {var $arr = ['one' => 'item 1', 'two' => 'item 2']}

moderno:     {var $arr = [one: 'item 1', two: 'item 2']}

Filtros

Los filtros se pueden usar para cualquier expresión, basta con encerrar el conjunto en paréntesis:

{var $content = ($text|truncate: 30|upper)}

Operador in

El operador in puede reemplazar la función in_array(). La comparación siempre es estricta:

{* análogo a in_array($item, $items, true) *}
{if $item in $items}
	...
{/if}

Ventana histórica

Latte introdujo a lo largo de su historia una serie de azúcares sintácticos que aparecieron unos años después en el propio PHP. Por ejemplo, en Latte era posible escribir arrays como [1, 2, 3] en lugar de array(1, 2, 3) o usar el operador nullsafe $obj?->foo mucho antes de que fuera posible en el propio PHP. Latte también introdujo el operador para el desempaquetado de arrays (expand) $arr, que es el equivalente del actual operador ...$arr de PHP.

El operador seguro para indefinidos ??->, que es análogo al operador nullsafe ?->, pero que no lanza un error si la variable no existe, surgió por razones históricas y hoy recomendamos usar el operador PHP estándar ?->.

Limitaciones de PHP en Latte

En Latte solo se pueden escribir expresiones PHP. Por lo tanto, no se pueden usar sentencias terminadas en punto y coma. No se pueden declarar clases ni usar estructuras de control, por ejemplo, if, foreach, switch, return, try, throw y otras, en lugar de las cuales Latte ofrece sus etiquetas. Tampoco se pueden usar atributos, backticks ni algunas constantes mágicas. Tampoco se pueden usar unset, echo, include, require, exit, eval, porque no son funciones, sino construcciones especiales del lenguaje PHP, y por lo tanto no son expresiones. Los comentarios solo se admiten los multilínea /* ... */.

Sin embargo, estas limitaciones se pueden eludir activando la extensión RawPhpExtension, gracias a la cual se puede usar cualquier código PHP en la etiqueta {php ...} bajo la responsabilidad del autor de la plantilla.