Nette Documentation Preview

syntax
Sfaturi și trucuri
******************


Editori și IDE .[#toc-editors-and-ide]
======================================

Scrieți șabloane într-un editor sau IDE care are suport pentru Latte. Va fi mult mai plăcut.

- NetBeans IDE are suport încorporat
- PhpStorm: instalați [pluginul Latte |https://plugins.jetbrains.com/plugin/7457-latte] în `Settings > Plugins > Marketplace`
- VS Code: căutați în markerplace pentru pluginul "Nette Latte + Neon"
- Sublime Text 3: în Package Control găsiți și instalați pachetul `Nette` și selectați Latte în `View > Syntax`
- în vechile editoare utilizați evidențierea Smarty pentru fișierele .latte

Plugin-ul pentru PhpStorm este foarte avansat și poate sugera perfect codul PHP. Pentru a funcționa în mod optim, utilizați [șabloane tipizate |type-system].

[* latte-phpstorm-plugin.webp *]

Suportul pentru Latte poate fi găsit și în corectorul de cod web [Prism.js |https://prismjs.com/#supported-languages] și în editorul [Ace |https://ace.c9.io].


Latte în JavaScript sau CSS .[#toc-latte-inside-javascript-or-css]
==================================================================

Latte poate fi utilizat foarte confortabil în JavaScript sau CSS. Dar cum să evitați ca Latte să considere din greșeală codul JavaScript sau stilul CSS ca fiind 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>
```

**Opțiunea 1**

Evitați situațiile în care o literă urmează imediat după un `{`, fie prin inserarea unui spațiu, a unei pauze de rând sau a unor ghilimele între ele:

```latte
<style>
	body {
		color: blue
	}
</style>

<script>
	var obj = {'id': 123};
</script>
```

**Opțiunea 2**

Dezactivează complet procesarea etichetelor Latte în interiorul unui element care utilizează [n:syntax |tags#syntax]:

```latte
<script n:syntax="off">
	var obj = {id: 123};
</script>
```

**Opțiunea 3**

Comutați sintaxa etichetei Latte la acolade duble în interiorul elementului:

```latte
<script n:syntax="double">
	var obj = {id: 123};          // this is JavaScript

	{{if $cond}} alert(); {{/if}} // this is Latte tag
</script>
```

În JavaScript, [nu puneți variabilele între ghilimele |tags#Printing in JavaScript].


Înlocuire pentru `use` Clauză .[#toc-replacement-for-use-clause]
================================================================

Cum să înlocuiți clauzele `use` utilizate în PHP, astfel încât să nu fie nevoie să scrieți un namespace atunci când accesați o clasă? Exemplu PHP:

```php
use Pets\Model\Dog;

if ($dog->status === Dog::StatusHungry) {
	// ...
}
```

**Opțiunea 1**

În loc de clauza `use`, stocați numele clasei într-o variabilă și apoi, în loc de `Dog`, utilizați `$Dog`:

```latte
{var $Dog = Pets\Model\Dog::class}

<div>
	{if $dog->status === $Dog::StatusHungry}
		...
	{/if}
</div>
```

**Opțiunea 2**

În cazul în care obiectul `$dog` este o instanță a `Pets\Model\Dog`, atunci se poate utiliza `{if $dog->status === $dog::StatusHungry}`.


Generarea XML în Latte .[#toc-generating-xml-in-latte]
======================================================

Latte poate genera orice format de text (HTML, XML, CSV, iCal etc.), însă, pentru a scăpa în mod corespunzător datele afișate, trebuie să-i spunem ce format generăm. Aplicația [`{contentType}` |tags#contentType] este utilizată în acest scop.

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

Apoi, de exemplu, putem genera o hartă a site-ului într-un mod similar:

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


Transmiterea datelor dintr-un șablon inclus .[#toc-passing-data-from-an-included-template]
==========================================================================================

Variabilele pe care le creăm cu `{var}` sau `{default}` în șablonul inclus există doar în acesta și nu sunt disponibile în șablonul inclus.
Dacă dorim să transmitem anumite date din șablonul inclus înapoi în șablonul inclus, una dintre opțiuni este să transmitem un obiect șablonului și să setăm datele în el.

Șablonul principal:

```latte
{* creează un obiect gol $vars *}
{var $vars = (object) null}

{include 'included.latte', vars: $vars}

{* conține acum proprietatea foo *}
{$vars->foo}
```

Șablon inclus `included.latte`:

```latte
{* scrie date în proprietatea foo *}
{var $vars->foo = 123}
```

Sfaturi și trucuri

Editori și IDE

Scrieți șabloane într-un editor sau IDE care are suport pentru Latte. Va fi mult mai plăcut.

  • NetBeans IDE are suport încorporat
  • PhpStorm: instalați pluginul Latte în Settings > Plugins > Marketplace
  • VS Code: căutați în markerplace pentru pluginul „Nette Latte + Neon“
  • Sublime Text 3: în Package Control găsiți și instalați pachetul Nette și selectați Latte în View > Syntax
  • în vechile editoare utilizați evidențierea Smarty pentru fișierele .latte

Plugin-ul pentru PhpStorm este foarte avansat și poate sugera perfect codul PHP. Pentru a funcționa în mod optim, utilizați șabloane tipizate.

Suportul pentru Latte poate fi găsit și în corectorul de cod web Prism.js și în editorul Ace.

Latte în JavaScript sau CSS

Latte poate fi utilizat foarte confortabil în JavaScript sau CSS. Dar cum să evitați ca Latte să considere din greșeală codul JavaScript sau stilul CSS ca fiind un tag Latte?

<style>
	/* ERROR: interprets as tag {color} */
	body {color: blue}
</style>

<script>
	// ERROR: interprets as tag {id}
	var obj = {id: 123};
</script>

Opțiunea 1

Evitați situațiile în care o literă urmează imediat după un {, fie prin inserarea unui spațiu, a unei pauze de rând sau a unor ghilimele între ele:

<style>
	body {
		color: blue
	}
</style>

<script>
	var obj = {'id': 123};
</script>

Opțiunea 2

Dezactivează complet procesarea etichetelor Latte în interiorul unui element care utilizează n:syntax:

<script n:syntax="off">
	var obj = {id: 123};
</script>

Opțiunea 3

Comutați sintaxa etichetei Latte la acolade duble în interiorul elementului:

<script n:syntax="double">
	var obj = {id: 123};          // this is JavaScript

	{{if $cond}} alert(); {{/if}} // this is Latte tag
</script>

În JavaScript, nu puneți variabilele între ghilimele.

Înlocuire pentru use Clauză

Cum să înlocuiți clauzele use utilizate în PHP, astfel încât să nu fie nevoie să scrieți un namespace atunci când accesați o clasă? Exemplu PHP:

use Pets\Model\Dog;

if ($dog->status === Dog::StatusHungry) {
	// ...
}

Opțiunea 1

În loc de clauza use, stocați numele clasei într-o variabilă și apoi, în loc de Dog, utilizați $Dog:

{var $Dog = Pets\Model\Dog::class}

<div>
	{if $dog->status === $Dog::StatusHungry}
		...
	{/if}
</div>

Opțiunea 2

În cazul în care obiectul $dog este o instanță a Pets\Model\Dog, atunci se poate utiliza {if $dog->status === $dog::StatusHungry}.

Generarea XML în Latte

Latte poate genera orice format de text (HTML, XML, CSV, iCal etc.), însă, pentru a scăpa în mod corespunzător datele afișate, trebuie să-i spunem ce format generăm. Aplicația {contentType} este utilizată în acest scop.

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

Apoi, de exemplu, putem genera o hartă a site-ului într-un mod similar:

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

Transmiterea datelor dintr-un șablon inclus

Variabilele pe care le creăm cu {var} sau {default} în șablonul inclus există doar în acesta și nu sunt disponibile în șablonul inclus. Dacă dorim să transmitem anumite date din șablonul inclus înapoi în șablonul inclus, una dintre opțiuni este să transmitem un obiect șablonului și să setăm datele în el.

Șablonul principal:

{* creează un obiect gol $vars *}
{var $vars = (object) null}

{include 'included.latte', vars: $vars}

{* conține acum proprietatea foo *}
{$vars->foo}

Șablon inclus included.latte:

{* scrie date în proprietatea foo *}
{var $vars->foo = 123}