Trucos y consejos

Editores e IDE

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

  • NetBeans IDE tiene soporte incorporado
  • PhpStorm: instale el plugin Latte en Settings > Plugins > Marketplace
  • VS Code: busque en markerplace el plugin de plantillas Nette Latte + NeonNette Latte
  • Sublime Text 3: en Package Control busque e instale el paquete Nette y seleccione Latte en View > Syntax
  • en editores antiguos utilice Smarty para resaltar los archivos .latte

El plugin para PhpStorm es muy avanzado y puede perfectamente sugerir código PHP. Para trabajar de forma óptima, utilice plantillas tipadas.

También se puede 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 puede utilizarse muy cómodamente dentro de JavaScript o CSS. Pero, ¿cómo evitar que Latte considere erróneamente el código JavaScript o el estilo CSS como una etiqueta Latte?

<style>
	/* ERROR: interprets as tag {color} */
	body {color: blue}
</style>

<script>
	// ERROR: interprets as tag {id}
	var obj = {id: 123};
</script>

Opción 1

Evite situaciones en las que una letra siga inmediatamente a una {, ya sea insertando un espacio, un salto de línea o una comilla entre ellas:

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

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

Opción 2

Desactivar completamente el procesamiento de etiquetas Latte dentro de un elemento utilizando n:syntax:

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

Opción 3

Cambiar la sintaxis de la etiqueta Latte a doble llave dentro del elemento:

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

	{{if $cond}} alert(); {{/if}} // this is Latte tag
</script>

En JavaScript, no ponga la variable entre comillas.

Sustitución de la cláusula use

¿Cómo sustituir las cláusulas use utilizadas en PHP para no tener que escribir un namespace al acceder a una clase? Ejemplo PHP:

use Pets\Model\Dog;

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

Opción 1

En lugar de la cláusula use almacene el nombre de la clase en una variable y luego en lugar de Dog utilice $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, entonces se puede utilizar {if $dog->status === $dog::StatusHungry}.

Generación de XML en Latte

Latte puede generar cualquier formato de texto (HTML, XML, CSV, iCal, etc.), sin embargo, para que escape correctamente de los datos mostrados, debemos indicarle qué formato estamos generando. Para ello se utiliza la etiqueta {contentType} se utiliza para ello.

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

Entonces, por ejemplo, podemos generar un mapa del sitio de una manera similar:

{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 que creamos con {var} o {default} en la plantilla incluida sólo existen en ella y no están disponibles en la plantilla incluida. Si queremos pasar algunos datos de la plantilla incluida de vuelta a la incluida, una de las opciones es pasar un objeto a la plantilla y establecer los datos en él.

Plantilla principal:

{* creates an empty object $vars *}
{var $vars = (object) null}

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

{* now contains property foo *}
{$vars->foo}

Plantilla incluida included.latte:

{* write data to the property foo *}
{var $vars->foo = 123}
versión: 3.0