Nette Documentation Preview

syntax
Suggerimenti e trucchi
**********************


Editor e IDE .[#toc-editors-and-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 |https://plugins.jetbrains.com/plugin/7457-latte] in `Settings > Plugins > Marketplace`
- Codice VS: cercare markerplace per il plugin [dei modelli |https://marketplace.visualstudio.com/items?itemName=smuuf.latte-lang] [Nette Latte + Neon |https://marketplace.visualstudio.com/items?itemName=Kasik96.latte] o [Nette Latte |https://marketplace.visualstudio.com/items?itemName=smuuf.latte-lang]
- Sublime Text 3: in Package Control trovare e installare il pacchetto `Nette` e selezionare Latte in `View > 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 |type-system].

[* latte-phpstorm-plugin.webp *]

Il supporto per Latte si trova anche nel web code highlighter [Prism.js |https://prismjs.com/#supported-languages] e nell'editor [Ace |https://ace.c9.io].


Latte all'interno di JavaScript o CSS .[#toc-latte-inside-javascript-or-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?

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

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

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

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


Sostituzione della clausola `use` .[#toc-replacement-for-use-clause]
====================================================================

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:

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

```latte
{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 .[#toc-generating-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}` |tags#contentType] serve a questo scopo.

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

Quindi, ad esempio, possiamo generare una sitemap in modo simile:

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


Passare i dati da un modello incluso .[#toc-passing-data-from-an-included-template]
===================================================================================

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:

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

```latte
{* scrivere i dati nella proprietà foo *}
{var $vars->foo = 123}
```

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 + NeonNette Latte
  • Sublime Text 3: in Package Control trovare e installare il pacchetto Nette e selezionare Latte in View > 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}