Nette Documentation Preview

syntax
Поради та рекомендації
**********************


Редактори та IDE .[#toc-editors-and-ide]
========================================

Пишіть шаблони в редакторі або IDE, в яких є підтримка Latte. Це буде набагато приємніше.

- NetBeans IDE має вбудовану підтримку
- PhpStorm: встановіть [плагін Latte |https://plugins.jetbrains.com/plugin/7457-latte] в `Settings > Plugins > Marketplace`
- VS Code: пошук маркерів для плагіна [шаблонів |https://marketplace.visualstudio.com/items?itemName=smuuf.latte-lang] [Nette Latte + Neon |https://marketplace.visualstudio.com/items?itemName=Kasik96.latte] або [Nette Latte |https://marketplace.visualstudio.com/items?itemName=smuuf.latte-lang]
- Sublime Text 3: у Package Control знайдіть і встановіть пакет `Nette` і виберіть Latte in `View > Syntax`
- у старих редакторах використовуйте підсвічування Smarty для файлів .latte

Плагін для PhpStorm дуже просунутий і може відмінно підказувати PHP код. Для оптимальної роботи використовуйте [типізовані шаблони |type-system].

[* latte-phpstorm-plugin.webp *]

Підтримку Latte також можна знайти у веб-виділювачі коду [Prism.js |https://prismjs.com/#supported-languages] і редакторі [Ace |https://ace.c9.io].


Latte Inside JavaScript або CSS .[#toc-latte-inside-javascript-or-css]
======================================================================

Latte можна дуже зручно використовувати всередині JavaScript або CSS. Але як уникнути того, щоб Latte помилково вважав код JavaScript або стиль CSS тегом Latte?

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

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

**Варіант 1**

Уникайте ситуацій, коли буква слідує одразу за `{`, вставляючи між ними пробіл, перенесення рядка або лапки:

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

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

**Варіант 2**

Повністю вимкнути обробку тегів Latte всередині елемента за допомогою [n:syntax |tags#Syntax]:

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

**Опція 3**

Переключіть синтаксис тега Latte на подвійні фігурні дужки всередині елемента:

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

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

У JavaScript [не укладайте змінну в |tags#Filters] лапки.


Заміна для пункту `use` .[#toc-replacement-for-use-clause]
==========================================================

Як замінити клаузулу `use`, що використовується в PHP, щоб не писати простір імен при зверненні до класу? Приклад PHP:

```php
use Pets\Model\Dog;

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

**Варіант 1**

Замість пункту `use` збережіть ім'я класу у змінній, а потім замість `Dog` використовуйте `$Dog`:

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

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

** Варіант 2**

Якщо об'єкт `$dog` є екземпляром `Pets\Model\Dog`, то можна використовувати `{if $dog->status === $dog::StatusHungry}`.


Генерація XML у Latte .[#toc-generating-xml-in-latte]
=====================================================

Latte може генерувати будь-який текстовий формат (HTML, XML, CSV, iCal і т. д.), однак для того, щоб правильно вивести дані, що відображаються, ми повинні вказати йому, який формат ми генеруємо. Для цього використовується тег [`{contentType}` |tags#contentType] використовується для цього.

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

Потім, наприклад, ми можемо згенерувати карту сайту аналогічним чином:

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


Передача даних з увімкненого шаблону .[#toc-passing-data-from-an-included-template]
===================================================================================

Змінні, які ми створюємо за допомогою `{var}` або `{default}` у ввімкненому шаблоні, існують тільки в ньому та недоступні у ввімкненому шаблоні.
Якщо ми хочемо передати деякі дані з шаблону, що вмикається, назад у шаблон, що вмикається, один із варіантів - передати в шаблон об'єкт і встановити в нього дані.

Основний шаблон:

```latte
{* creates an empty object $vars *}
{var $vars = (object) null}

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

{* now contains property foo *}
{$vars->foo}
```

Включений шаблон `included.latte`:

```latte
{* write data to the property foo *}
{var $vars->foo = 123}
```

Поради та рекомендації

Редактори та IDE

Пишіть шаблони в редакторі або IDE, в яких є підтримка Latte. Це буде набагато приємніше.

  • NetBeans IDE має вбудовану підтримку
  • PhpStorm: встановіть плагін Latte в Settings > Plugins > Marketplace
  • VS Code: пошук маркерів для плагіна шаблонів Nette Latte + Neon або Nette Latte
  • Sublime Text 3: у Package Control знайдіть і встановіть пакет Nette і виберіть Latte in View > Syntax
  • у старих редакторах використовуйте підсвічування Smarty для файлів .latte

Плагін для PhpStorm дуже просунутий і може відмінно підказувати PHP код. Для оптимальної роботи використовуйте типізовані шаблони.

Підтримку Latte також можна знайти у веб-виділювачі коду Prism.js і редакторі Ace.

Latte Inside JavaScript або CSS

Latte можна дуже зручно використовувати всередині JavaScript або CSS. Але як уникнути того, щоб Latte помилково вважав код JavaScript або стиль CSS тегом Latte?

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

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

Варіант 1

Уникайте ситуацій, коли буква слідує одразу за {, вставляючи між ними пробіл, перенесення рядка або лапки:

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

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

Варіант 2

Повністю вимкнути обробку тегів Latte всередині елемента за допомогою n:syntax:

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

Опція 3

Переключіть синтаксис тега Latte на подвійні фігурні дужки всередині елемента:

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

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

У JavaScript не укладайте змінну в лапки.

Заміна для пункту use

Як замінити клаузулу use, що використовується в PHP, щоб не писати простір імен при зверненні до класу? Приклад PHP:

use Pets\Model\Dog;

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

Варіант 1

Замість пункту use збережіть ім'я класу у змінній, а потім замість Dog використовуйте $Dog:

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

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

** Варіант 2**

Якщо об'єкт $dog є екземпляром Pets\Model\Dog, то можна використовувати {if $dog->status === $dog::StatusHungry}.

Генерація XML у Latte

Latte може генерувати будь-який текстовий формат (HTML, XML, CSV, iCal і т. д.), однак для того, щоб правильно вивести дані, що відображаються, ми повинні вказати йому, який формат ми генеруємо. Для цього використовується тег {contentType} використовується для цього.

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

Потім, наприклад, ми можемо згенерувати карту сайту аналогічним чином:

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

Передача даних з увімкненого шаблону

Змінні, які ми створюємо за допомогою {var} або {default} у ввімкненому шаблоні, існують тільки в ньому та недоступні у ввімкненому шаблоні. Якщо ми хочемо передати деякі дані з шаблону, що вмикається, назад у шаблон, що вмикається, один із варіантів – передати в шаблон об'єкт і встановити в нього дані.

Основний шаблон:

{* creates an empty object $vars *}
{var $vars = (object) null}

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

{* now contains property foo *}
{$vars->foo}

Включений шаблон included.latte:

{* write data to the property foo *}
{var $vars->foo = 123}