Suggerimenti e trucchi
Editor e IDE
Scrivete i modelli in un editor o IDE che supporti Latte. Sarà molto più piacevole.
- NetBeans IDE ha un supporto integrato
- PhpStorm: installare il plugin Latte in
Settings > Plugins > Marketplace
- Codice VS: cercare markerplace per il plugin dei modelli Nette Latte + Neon o Nette Latte
- Sublime Text 3: in Package Control trovare e installare il pacchetto
Nette
e selezionare Latte inView > Syntax
- nei vecchi editor usare l'evidenziazione Smarty per i file .latte
Il plugin per PhpStorm è molto avanzato e può suggerire perfettamente il codice PHP. Per lavorare in modo ottimale, utilizzare modelli digitati.
Il supporto per Latte si trova anche nel web code highlighter Prism.js e nell'editor Ace.
Latte all'interno di JavaScript o CSS
Latte può essere usato molto comodamente all'interno di JavaScript o CSS. Ma come evitare che Latte consideri erroneamente il codice JavaScript o lo stile CSS come un tag Latte?
<style>
/* ERROR: interprets as tag {color} */
body {color: blue}
</style>
<script>
// ERROR: interprets as tag {id}
var obj = {id: 123};
</script>
Opzione 1
Evitare le situazioni in cui una lettera segue immediatamente una {
, inserendo uno spazio, un'interruzione di riga
o una virgoletta tra di esse:
<style>
body {
color: blue
}
</style>
<script>
var obj = {'id': 123};
</script>
Opzione 2
Disattiva completamente l'elaborazione dei tag Latte all'interno di un elemento che utilizza la sintassi n:syntax:
<script n:syntax="off">
var obj = {id: 123};
</script>
Opzione 3
Cambia la sintassi del tag Latte con doppie parentesi graffe all'interno dell'elemento:
<script n:syntax="double">
var obj = {id: 123}; // this is JavaScript
{{if $cond}} alert(); {{/if}} // this is Latte tag
</script>
In JavaScript, non inserire le variabili tra virgolette.
Sostituzione della clausola use
Come sostituire le clausole use
usate in PHP, in modo da non dover scrivere uno spazio dei nomi quando si accede a
una classe? Esempio PHP:
use Pets\Model\Dog;
if ($dog->status === Dog::StatusHungry) {
// ...
}
Opzione 1
Invece della clausola use
memorizzare il nome della classe in una variabile e poi invece di Dog
usare
$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
, è possibile utilizzare
{if $dog->status === $dog::StatusHungry}
.
Generazione di XML in Latte
Latte può generare qualsiasi formato di testo (HTML, XML, CSV, iCal, ecc.), tuttavia, per poter eseguire correttamente
l'escape dei dati visualizzati, è necessario indicare il formato che stiamo generando. A questo scopo si utilizza il tag {contentType}
serve a questo scopo.
{contentType application/xml}
<?xml version="1.0" encoding="UTF-8"?>
...
Quindi, ad esempio, possiamo generare 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 i dati da un modello incluso
Le variabili create con {var}
o {default}
nel template incluso esistono solo in esso e non sono
disponibili nel template incluso. Se vogliamo passare alcuni dati dal template incluso a quello incluso, una delle opzioni è
passare un oggetto al template e impostare i dati su di esso.
Modello principale:
{* crea an empty object $vars *}
{var $vars = (object) null}
{include 'included.latte', vars: $vars}
{* ora contiene la proprietà pippo *}
{$vars->foo}
Modello incluso included.latte
:
{* scrivere i dati nella proprietà foo *}
{var $vars->foo = 123}