Conseils et astuces
Éditeurs et IDE
Écrivez des modèles dans un éditeur ou un IDE qui prend en charge Latte. Ce sera beaucoup plus agréable.
- L'EDI NetBeans a un support intégré
- PhpStorm : installez le plugin Latte en
Settings > Plugins > Marketplace
- VS Code : rechercher sur markerplace le plugin Nette Latte + Neon ou Nette Latte templates
- Sublime Text 3 : dans Package Control, trouvez et installez le paquet
Nette
et sélectionnez Latte dans le menu déroulant.View > Syntax
- Dans les anciens éditeurs, utilisez la mise en évidence Smarty pour les fichiers .latte.
Le plugin pour PhpStorm est très avancé et peut parfaitement suggérer du code PHP. Pour un fonctionnement optimal, utilisez des templates typés.
![](https://files.nette.org/www/latte-phpstorm-plugin.webp)
Le support de Latte peut également être trouvé dans le surligneur de code web Prism.js et l'éditeur Ace.
Latte dans JavaScript ou CSS
Latte peut être utilisé très confortablement dans JavaScript ou CSS. Mais comment éviter que Latte ne considère par erreur le code JavaScript ou le style CSS comme une balise Latte ?
<style>
/* ERROR: interprets as tag {color} */
body {color: blue}
</style>
<script>
// ERROR: interprets as tag {id}
var obj = {id: 123};
</script>
Option 1
Évitez les situations où une lettre suit immédiatement un {
, soit en insérant un espace, un saut de ligne ou
un guillemet entre les deux :
<style>
body {
color: blue
}
</style>
<script>
var obj = {'id': 123};
</script>
Option 2
Désactiver complètement le traitement des balises Latte à l'intérieur d'un élément utilisant n:syntax:
<script n:syntax="off">
var obj = {id: 123};
</script>
Option 3
Changez la syntaxe de la balise Latte en double accolade à l'intérieur de l'élément :
<script n:syntax="double">
var obj = {id: 123}; // this is JavaScript
{{if $cond}} alert(); {{/if}} // this is Latte tag
</script>
En JavaScript, ne pas mettre les variables entre guillemets.
Remplacement de la clause use
Comment remplacer les clauses use
utilisées en PHP afin de ne pas avoir à écrire un espace de nom lors de
l'accès à une classe ? Exemple PHP :
use Pets\Model\Dog;
if ($dog->status === Dog::StatusHungry) {
// ...
}
Option 1
Au lieu de la clause use
, stockez le nom de la classe dans une variable et ensuite, au lieu de Dog
,
utilisez $Dog
:
{var $Dog = Pets\Model\Dog::class}
<div>
{if $dog->status === $Dog::StatusHungry}
...
{/if}
</div>
Option 2
Si l'objet $dog
est une instance de Pets\Model\Dog
, alors
{if $dog->status === $dog::StatusHungry}
peut être utilisé.
Génération de XML dans Latte
Latte peut générer n'importe quel format de texte (HTML, XML, CSV, iCal, etc.). Cependant, afin d'échapper correctement aux
données affichées, nous devons lui indiquer le format que nous générons. La balise {contentType}
est utilisée pour cela.
{contentType application/xml}
<?xml version="1.0" encoding="UTF-8"?>
...
Ensuite, nous pouvons, par exemple, générer un plan de site de manière similaire :
{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>
Transmettre des données à partir d'un modèle inclus
Les variables que nous créons avec {var}
ou {default}
dans le modèle inclus n'existent que dans ce
modèle et ne sont pas disponibles dans le modèle inclus. Si nous voulons transmettre des données du modèle inclus vers le
modèle inclus, l'une des options consiste à transmettre un objet au modèle et à lui attribuer les données.
Modèle principal :
{* crée un objet vide $vars *}
{var $vars = (object) null}
{include 'included.latte', vars: $vars}
{* contient maintenant la propriété foo *}
{$vars->foo}
Modèle inclus included.latte
:
{* écrire des données dans la propriété foo *}
{var $vars->foo = 123}