Nette Documentation Preview

syntax
Porady i wskazówki
******************


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

Napisz szablony w edytorze lub IDE, który ma wsparcie dla Latte. Będzie to o wiele przyjemniejsze.

- NetBeans IDE ma wbudowaną obsługę
- PhpStorm: zainstaluj [wtyczkę Latte |https://plugins.jetbrains.com/plugin/7457-latte] w `Settings > Plugins > Marketplace`
- VS Code: wyszukaj markerplace dla [Nette Latte + Neon |https://marketplace.visualstudio.com/items?itemName=Kasik96.latte] lub [Nette Latte templates |https://marketplace.visualstudio.com/items?itemName=smuuf.latte-lang] plugin
- Sublime Text 3: w Package Control znajdź i zainstaluj pakiet `Nette` i wybierz Latte w `View > Syntax`
- W starych edytorach użyj podświetlenia Smarty dla plików .latte

Wtyczka do PhpStorm jest bardzo zaawansowana i może wykonać świetną robotę z podpowiadaniem kodu PHP. Aby działało to optymalnie, użyj [szablonów typowych |type-system].

[* latte-phpstorm-plugin.webp *]

Możesz również znaleźć wsparcie dla Latte w zakreślaczu kodu internetowego [Prism.js |https://prismjs.com/#supported-languages] i edytorze [Ace |https://ace.c9.io].


Latte wewnątrz JavaScript lub CSS .[#toc-latte-inside-javascript-or-css]
========================================================================

Latte można bardzo wygodnie używać wewnątrz JavaScript lub CSS. Jak jednak uniknąć sytuacji, w której Latte pomyli kod JavaScript lub styl CSS jako tag Latte?

```latte
<style>
	/* CHYBA: interpretuje jako značku {color} */
	body {color: blue}
</style>

<script>
	// CHYBA: interpretuje jako značku {id}
	var obj = {id: 123};
</script>
```

**Opcja 1**

Unikaj sytuacji, w której litera następuje bezpośrednio po `{`, na przykład przez umieszczenie przed nią spacji, przerwy w linii lub cytatu:

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

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

**Opcja 2**

Całkowite wyłączenie przetwarzania znaczników Latte wewnątrz elementu za pomocą [n:syntax |tags#Syntax]:

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

**zmienna 3**

Przełącz składnię znaku Latte wewnątrz elementu na podwójne nawiasy złożone:

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

	{{if $cond}} alert(); {{/if}} // tohle je Latte
</script>
```

JavaScript [nie pisze cudzysłowów wokół zmiennej |tags#printing-in-javascript].


Zastąpić `use` dla słuchawki w Latte .[#toc-replacement-for-use-clause]
=======================================================================

Jak zastąpić klauzule `use` w Latte , które są używane w PHP, aby nie trzeba było pisać przestrzeni nazw podczas dostępu do klasy? Przykład w PHP:

```php
use Pets\Model\Dog;

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

**zmienna 1**

Zamiast `use` przechowujemy nazwę klasy w zmiennej, a następnie używamy `$Dog` zamiast `Dog`:

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

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

**zmienna 2**

Jeśli obiekt `$dog` jest instancją `Pets\Model\Dog`, to można użyć `{if $dog->status === $dog::StatusHungry}`.


Generowanie XML w Latte .[#toc-generating-xml-in-latte]
=======================================================

Latte może wygenerować dowolny format tekstu (HTML, XML, CSV, iCal, itp.), jednak aby poprawnie eskploatował dane wyjściowe, musimy mu powiedzieć, jaki format generujemy. Do tego celu służy tag [`{contentType}` |tags#contentType].

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

Następnie w podobny sposób możemy wygenerować sitemapę:

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


Przekazywanie danych z dołączonego szablonu .[#toc-passing-data-from-an-included-template]
==========================================================================================

Zmienne, które tworzymy za pomocą `{var}` lub `{default}` w szablonie included, istnieją tylko w szablonie included i nie są dostępne w szablonie included.
Jeśli chcemy przekazać jakieś dane z szablonu included z powrotem do szablonu inclusive, jedną z opcji jest przekazanie obiektu do szablonu i wstawienie do niego danych.

Główny szablon:

```latte
{* vytvoří prázdný objekt $vars *}
{var $vars = (object) null}

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

{* nyní obsahuje property foo *}
{$vars->foo}
```

Szablon integracyjny `included.latte`:

```latte
{* zapíšeme data do property foo *}
{var $vars->foo = 123}
```

Porady i wskazówki

Edytory i IDE

Napisz szablony w edytorze lub IDE, który ma wsparcie dla Latte. Będzie to o wiele przyjemniejsze.

  • NetBeans IDE ma wbudowaną obsługę
  • PhpStorm: zainstaluj wtyczkę Latte w Settings > Plugins > Marketplace
  • VS Code: wyszukaj markerplace dla Nette Latte + Neon lub Nette Latte templates plugin
  • Sublime Text 3: w Package Control znajdź i zainstaluj pakiet Nette i wybierz Latte w View > Syntax
  • W starych edytorach użyj podświetlenia Smarty dla plików .latte

Wtyczka do PhpStorm jest bardzo zaawansowana i może wykonać świetną robotę z podpowiadaniem kodu PHP. Aby działało to optymalnie, użyj szablonów typowych.

Możesz również znaleźć wsparcie dla Latte w zakreślaczu kodu internetowego Prism.js i edytorze Ace.

Latte wewnątrz JavaScript lub CSS

Latte można bardzo wygodnie używać wewnątrz JavaScript lub CSS. Jak jednak uniknąć sytuacji, w której Latte pomyli kod JavaScript lub styl CSS jako tag Latte?

<style>
	/* CHYBA: interpretuje jako značku {color} */
	body {color: blue}
</style>

<script>
	// CHYBA: interpretuje jako značku {id}
	var obj = {id: 123};
</script>

Opcja 1

Unikaj sytuacji, w której litera następuje bezpośrednio po {, na przykład przez umieszczenie przed nią spacji, przerwy w linii lub cytatu:

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

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

Opcja 2

Całkowite wyłączenie przetwarzania znaczników Latte wewnątrz elementu za pomocą n:syntax:

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

zmienna 3

Przełącz składnię znaku Latte wewnątrz elementu na podwójne nawiasy złożone:

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

	{{if $cond}} alert(); {{/if}} // tohle je Latte
</script>

JavaScript nie pisze cudzysłowów wokół zmiennej.

Zastąpić use dla słuchawki w Latte

Jak zastąpić klauzule use w Latte , które są używane w PHP, aby nie trzeba było pisać przestrzeni nazw podczas dostępu do klasy? Przykład w PHP:

use Pets\Model\Dog;

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

zmienna 1

Zamiast use przechowujemy nazwę klasy w zmiennej, a następnie używamy $Dog zamiast Dog:

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

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

zmienna 2

Jeśli obiekt $dog jest instancją Pets\Model\Dog, to można użyć {if $dog->status === $dog::StatusHungry}.

Generowanie XML w Latte

Latte może wygenerować dowolny format tekstu (HTML, XML, CSV, iCal, itp.), jednak aby poprawnie eskploatował dane wyjściowe, musimy mu powiedzieć, jaki format generujemy. Do tego celu służy tag {contentType}.

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

Następnie w podobny sposób możemy wygenerować sitemapę:

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

Przekazywanie danych z dołączonego szablonu

Zmienne, które tworzymy za pomocą {var} lub {default} w szablonie included, istnieją tylko w szablonie included i nie są dostępne w szablonie included. Jeśli chcemy przekazać jakieś dane z szablonu included z powrotem do szablonu inclusive, jedną z opcji jest przekazanie obiektu do szablonu i wstawienie do niego danych.

Główny szablon:

{* vytvoří prázdný objekt $vars *}
{var $vars = (object) null}

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

{* nyní obsahuje property foo *}
{$vars->foo}

Szablon integracyjny included.latte:

{* zapíšeme data do property foo *}
{var $vars->foo = 123}