Nette Documentation Preview

syntax
Tippek és trükkök
*****************


Szerkesztők és IDE .[#toc-editors-and-ide]
==========================================

Írjon sablonokat olyan szerkesztőprogramban vagy IDE-ben, amely támogatja a Latte-t. Sokkal kellemesebb lesz.

- A NetBeans IDE beépített támogatással rendelkezik
- PhpStorm: telepítse a [Latte bővítményt |https://plugins.jetbrains.com/plugin/7457-latte] a `Settings > Plugins > Marketplace`
- VS kód: keresés markerplace a [Nette Latte + Neon |https://marketplace.visualstudio.com/items?itemName=Kasik96.latte] vagy [Nette Latte sablonok |https://marketplace.visualstudio.com/items?itemName=smuuf.latte-lang] pluginhoz
- Sublime Text 3: a Package Controlban keresse meg és telepítse a `Nette` csomagot és válassza ki a Latte-t a `View > Syntax`
- a régi szerkesztőkben használja a Smarty kiemelést a .latte fájlokra

A PhpStorm plugin nagyon fejlett, és tökéletesen tud PHP kódot sugallni. Az optimális működéshez használjon [tipizált sablonokat |type-system].

[* latte-phpstorm-plugin.webp *]

A Latte támogatása megtalálható a [Prism.js |https://prismjs.com/#supported-languages] webes kódkiemelőben és az [Ace |https://ace.c9.io] szerkesztőben is.


Latte JavaScript vagy CSS nyelven belül .[#toc-latte-inside-javascript-or-css]
==============================================================================

A Latte nagyon kényelmesen használható JavaScript vagy CSS nyelven belül. De hogyan lehet elkerülni, hogy a Latte tévesen JavaScript kódot vagy CSS stílust tekintsen Latte tagnek?

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

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

**1. lehetőség**

Kerülje az olyan helyzeteket, amikor egy betű közvetlenül egy `{` után következik, akár szóköz, akár sortörés, akár idézőjel beiktatásával:

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

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

**2. lehetőség**

Teljesen kikapcsolja a Latte címkék feldolgozását egy elemen belül az [n:syntax |tags#syntax] használatával:

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

**3. lehetőség**

A Latte tag szintaxisának átállítása az elemen belüli kettős szögletes zárójelekre:

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

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

JavaScriptben [ne tegye a változót idézőjelek közé |tags#Printing in JavaScript].


A `use` záradék helyettesítése .[#toc-replacement-for-use-clause]
=================================================================

Hogyan lehet helyettesíteni a PHP-ban használt `use` klauzulákat, hogy ne kelljen névteret írni egy osztály elérésekor? PHP példa:

```php
use Pets\Model\Dog;

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

**1. lehetőség**

A `use` záradék helyett tárolja az osztály nevét egy változóban, majd a `Dog` helyett használja a `$Dog`:

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

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

**2. lehetőség**

Ha a `$dog` objektum a `Pets\Model\Dog` példánya, akkor a `{if $dog->status === $dog::StatusHungry}` használható.


XML generálása Latte-ban .[#toc-generating-xml-in-latte]
========================================================

A Latte bármilyen szövegformátumot képes generálni (HTML, XML, CSV, iCal stb.), azonban ahhoz, hogy a megjelenített adatokat megfelelően kimenekítse, meg kell mondanunk neki, hogy milyen formátumot generálunk. A [`{contentType}` |tags#contentType] taget használjuk erre a célra.

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

Ezután például hasonló módon generálhatunk egy oldaltérképet:

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


Adatok átadása egy belefoglalt sablonból .[#toc-passing-data-from-an-included-template]
=======================================================================================

Azok a változók, amelyeket a `{var}` vagy a `{default}` segítségével hozunk létre a bevont sablonban, csak abban léteznek, és nem állnak rendelkezésre a bevont sablonban.
Ha a bevont sablonból vissza akarunk adni valamilyen adatot a bevont sablonba, akkor az egyik lehetőség, hogy egy objektumot adunk át a sablonba, és az adatokat beállítjuk benne.

Fő sablon:

```latte
{* létrehoz egy üres $vars objektumot *}
{var $vars = (object) null}

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

{* most már tartalmazza a foo tulajdonságot *}
{$vars->foo}
```

`included.latte`:

```latte
{* írja az adatokat a foo tulajdonságba *}
{var $vars->foo = 123}
```

Tippek és trükkök

Szerkesztők és IDE

Írjon sablonokat olyan szerkesztőprogramban vagy IDE-ben, amely támogatja a Latte-t. Sokkal kellemesebb lesz.

  • A NetBeans IDE beépített támogatással rendelkezik
  • PhpStorm: telepítse a Latte bővítményt a Settings > Plugins > Marketplace
  • VS kód: keresés markerplace a Nette Latte + Neon vagy Nette Latte sablonok pluginhoz
  • Sublime Text 3: a Package Controlban keresse meg és telepítse a Nette csomagot és válassza ki a Latte-t a View > Syntax
  • a régi szerkesztőkben használja a Smarty kiemelést a .latte fájlokra

A PhpStorm plugin nagyon fejlett, és tökéletesen tud PHP kódot sugallni. Az optimális működéshez használjon tipizált sablonokat.

A Latte támogatása megtalálható a Prism.js webes kódkiemelőben és az Ace szerkesztőben is.

Latte JavaScript vagy CSS nyelven belül

A Latte nagyon kényelmesen használható JavaScript vagy CSS nyelven belül. De hogyan lehet elkerülni, hogy a Latte tévesen JavaScript kódot vagy CSS stílust tekintsen Latte tagnek?

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

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

1. lehetőség

Kerülje az olyan helyzeteket, amikor egy betű közvetlenül egy { után következik, akár szóköz, akár sortörés, akár idézőjel beiktatásával:

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

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

2. lehetőség

Teljesen kikapcsolja a Latte címkék feldolgozását egy elemen belül az n:syntax használatával:

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

3. lehetőség

A Latte tag szintaxisának átállítása az elemen belüli kettős szögletes zárójelekre:

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

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

JavaScriptben ne tegye a változót idézőjelek közé.

A use záradék helyettesítése

Hogyan lehet helyettesíteni a PHP-ban használt use klauzulákat, hogy ne kelljen névteret írni egy osztály elérésekor? PHP példa:

use Pets\Model\Dog;

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

1. lehetőség

A use záradék helyett tárolja az osztály nevét egy változóban, majd a Dog helyett használja a $Dog:

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

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

2. lehetőség

Ha a $dog objektum a Pets\Model\Dog példánya, akkor a {if $dog->status === $dog::StatusHungry} használható.

XML generálása Latte-ban

A Latte bármilyen szövegformátumot képes generálni (HTML, XML, CSV, iCal stb.), azonban ahhoz, hogy a megjelenített adatokat megfelelően kimenekítse, meg kell mondanunk neki, hogy milyen formátumot generálunk. A {contentType} taget használjuk erre a célra.

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

Ezután például hasonló módon generálhatunk egy oldaltérképet:

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

Adatok átadása egy belefoglalt sablonból

Azok a változók, amelyeket a {var} vagy a {default} segítségével hozunk létre a bevont sablonban, csak abban léteznek, és nem állnak rendelkezésre a bevont sablonban. Ha a bevont sablonból vissza akarunk adni valamilyen adatot a bevont sablonba, akkor az egyik lehetőség, hogy egy objektumot adunk át a sablonba, és az adatokat beállítjuk benne.

Fő sablon:

{* létrehoz egy üres $vars objektumot *}
{var $vars = (object) null}

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

{* most már tartalmazza a foo tulajdonságot *}
{$vars->foo}

included.latte:

{* írja az adatokat a foo tulajdonságba *}
{var $vars->foo = 123}