Consigli e trucchi
Editor e IDE
Scrivete i template in un editor o in un IDE che supporti Latte: sarà molto più piacevole.
- PhpStorm: installate il plugin Latte in
Settings > Plugins > Marketplace - VS Code: installate Nette Latte + Neon, Nette Latte templates oppure il più recente plugin Nette for VS Code
- NetBeans IDE: il supporto nativo per Latte è incluso nell'installazione
- Sublime Text 3: cercate e installate il pacchetto
Nettein Package Control e scegliete Latte inView > Syntax - negli editor più vecchi, usate l'evidenziazione Smarty per i file
.latte
Il plugin per PhpStorm è molto avanzato e sa offrire ottimi suggerimenti per il codice PHP. Per un funzionamento ottimale usate i template tipizzati.

Il supporto per Latte si trova anche nell'evidenziatore di codice per il web Prism.js e nell'editor Ace.
Latte dentro JavaScript o CSS
Latte si può usare in modo molto comodo dentro JavaScript o CSS. Come evitare però le situazioni in cui Latte scambia per tag Latte il codice JavaScript o gli stili CSS?
<style>
/* ERRORE: viene interpretato come tag {color} */
body {color: blue}
</style>
<script>
// ERRORE: viene interpretato come tag {id}
var obj = {id: 123};
</script>
Opzione 1
Evitate le situazioni in cui una lettera segue immediatamente {, per esempio inserendo prima uno spazio, un a capo
o un apice:
<style>
body {
color: blue
}
</style>
<script>
var obj = {'id': 123};
</script>
Opzione 2
Disattivate completamente l'elaborazione dei tag Latte all'interno di un elemento con n:syntax:
<script n:syntax="off">
var obj = {id: 123};
</script>
Opzione 3
Cambiate la sintassi dei tag Latte all'interno dell'elemento in doppie parentesi graffe:
<script n:syntax="double">
var obj = {id: 123}; // questo è JavaScript
{{if $cond}} alert(); {{/if}} // questo è un tag Latte
</script>
In JavaScript, non mettete le variabili tra apici.
Sostituto della clausola use in Latte
Come sostituire in Latte le clausole use usate in PHP, per non dover scrivere il namespace quando si accede a una
classe? Esempio in PHP:
use Pets\Model\Dog;
if ($dog->status === Dog::StatusHungry) {
// ...
}
Opzione 1
Al posto della clausola use, salvate il nome della classe in una variabile e usate poi $Dog invece di
Dog:
{var $Dog = Pets\Model\Dog::class}
<div>
{if $dog->status === $Dog::StatusHungry}
...
{/if}
</div>
Opzione 2
Se l'oggetto $dog è un'istanza di Pets\Model\Dog, si può usare
{if $dog->status === $dog::StatusHungry}.
Generare XML in Latte
Latte può generare qualsiasi formato di testo (HTML, XML, CSV, iCal e così via), ma per eseguire correttamente l'escaping dei
dati stampati dobbiamo dirgli quale formato stiamo generando. A questo serve il tag {contentType}.
{contentType application/xml}
<?xml version="1.0" encoding="UTF-8"?>
...
Poi possiamo generare, per esempio, una sitemap in modo simile:
{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>
Passare dati da un template incluso
Le variabili create con {var} o {default} in un template incluso esistono solo all'interno di quel
template e non sono disponibili nel template che lo include. Se volete restituire dei dati dal template incluso a quello che lo
include, una possibilità è passare al template un oggetto e inserirvi i dati.
Template principale:
{* crea un oggetto vuoto $vars *}
{var $vars = (object) null}
{include 'included.latte', vars: $vars}
{* ora contiene la proprietà foo *}
{$vars->foo}
Template incluso included.latte:
{* scrive i dati nella proprietà foo *}
{var $vars->foo = 123}