Trucos y consejos

Editores e IDE

Escriba las plantillas en un editor o IDE con soporte para Latte. Será mucho más agradable.

  • PhpStorm: instale el plugin de Latte en Settings > Plugins > Marketplace
  • VS Code: instale Nette Latte + Neon, Nette Latte templates o el más reciente plugin Nette for VS Code
  • NetBeans IDE: el soporte nativo para Latte viene incluido en la instalación
  • Sublime Text 3: busque e instale el paquete Nette en Package Control y elija Latte en View > Syntax
  • en editores más antiguos, use el resaltado de Smarty para los archivos .latte

El plugin para PhpStorm es muy avanzado y sabe ofrecer excelentes sugerencias de código PHP. Para un funcionamiento óptimo, use plantillas tipadas.

También encontrará soporte para Latte en el resaltador de código web Prism.js y en el editor Ace.

Latte dentro de JavaScript o CSS

Latte se puede usar muy cómodamente dentro de JavaScript o CSS. Pero ¿cómo evitar que Latte tome por error código JavaScript o estilos CSS por etiquetas de Latte?

<style>
	/* ERROR: lo interpreta como la etiqueta {color} */
	body {color: blue}
</style>

<script>
	// ERROR: lo interpreta como la etiqueta {id}
	var obj = {id: 123};
</script>

Opción 1

Evite las situaciones en las que una letra sigue inmediatamente a {, por ejemplo insertando antes un espacio, un salto de línea o unas comillas:

<style>
	body {
		color: blue
	}
</style>

<script>
	var obj = {'id': 123};
</script>

Opción 2

Desactive por completo el procesamiento de las etiquetas de Latte dentro de un elemento con n:syntax:

<script n:syntax="off">
	var obj = {id: 123};
</script>

Opción 3

Cambie dentro del elemento la sintaxis de las etiquetas de Latte a llaves dobles:

<script n:syntax="double">
	var obj = {id: 123};          // esto es JavaScript

	{{if $cond}} alert(); {{/if}} // esto es una etiqueta de Latte
</script>

En JavaScript, no ponga la variable entre comillas.

Sustituto de la cláusula use en Latte

¿Cómo sustituir en Latte las cláusulas use que se usan en PHP, para no tener que escribir el espacio de nombres al acceder a una clase? Ejemplo en PHP:

use Pets\Model\Dog;

if ($dog->status === Dog::StatusHungry) {
	// ...
}

Opción 1

En lugar de la cláusula use, guarde el nombre de la clase en una variable y use después $Dog en lugar de Dog:

{var $Dog = Pets\Model\Dog::class}

<div>
	{if $dog->status === $Dog::StatusHungry}
		...
	{/if}
</div>

Opción 2

Si el objeto $dog es una instancia de Pets\Model\Dog, se puede usar {if $dog->status === $dog::StatusHungry}.

Generar XML en Latte

Latte puede generar cualquier formato de texto (HTML, XML, CSV, iCal, etc.), pero para escapar correctamente los datos mostrados debemos indicarle qué formato estamos generando. Para eso sirve la etiqueta {contentType}.

{contentType application/xml}
<?xml version="1.0" encoding="UTF-8"?>
...

Después podemos generar, por ejemplo, un sitemap de forma parecida:

{contentType application/xml}
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" >
	<url n:foreach="$urls as $url">
		<loc>{$url->loc}</loc>
		<lastmod>{$url->lastmod->format('Y-m-d')}</lastmod>
		<changefreq>{$url->frequency}</changefreq>
		<priority>{$url->priority}</priority>
	</url>
</urlset>

Pasar datos desde una plantilla incluida

Las variables creadas con {var} o {default} en una plantilla incluida existen solo dentro de esa plantilla y no están disponibles en la plantilla que la incluye. Si quiere devolver algún dato de la plantilla incluida a la que la incluye, una opción es pasar un objeto a la plantilla e insertar los datos en él.

Plantilla principal:

{* crea un objeto vacío $vars *}
{var $vars = (object) null}

{include 'included.latte', vars: $vars}

{* ahora contiene la propiedad foo *}
{$vars->foo}

Plantilla incluida included.latte:

{* escribe datos en la propiedad foo *}
{var $vars->foo = 123}
versión: 3.x