Nette Documentation Preview

syntax
Conseils et astuces
*******************


Éditeurs et IDE .[#toc-editors-and-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 |https://plugins.jetbrains.com/plugin/7457-latte] en `Settings > Plugins > Marketplace`
- VS Code : rechercher sur markerplace le plugin [Nette Latte + Neon |https://marketplace.visualstudio.com/items?itemName=Kasik96.latte] ou [Nette Latte templates |https://marketplace.visualstudio.com/items?itemName=smuuf.latte-lang]
- 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 |type-system].

[* latte-phpstorm-plugin.webp *]

Le support de Latte peut également être trouvé dans le surligneur de code web [Prism.js |https://prismjs.com/#supported-languages] et l'éditeur [Ace |https://ace.c9.io].


Latte dans JavaScript ou CSS .[#toc-latte-inside-javascript-or-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 ?

```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 :

```latte
<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 |tags#syntax]:

```latte
<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 :

```latte
<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 |tags#Printing in JavaScript].


Remplacement de la clause `use` .[#toc-replacement-for-use-clause]
==================================================================

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 :

```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`:

```latte
{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 .[#toc-generating-xml-in-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}` |tags#contentType] est utilisée pour cela.

```latte
{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 :

```latte
{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 .[#toc-passing-data-from-an-included-template]
==================================================================================================

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 :

```latte
{* 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`:

```latte
{* écrire des données dans la propriété foo *}
{var $vars->foo = 123}
```

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.

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}