Tipy a triky
************
Editory a IDE
=============
Pište šablony v editoru nebo IDE, který má podporu pro Latte. Bude to mnohem příjemnější.
- PhpStorm: nainstalujte v `Settings > Plugins > Marketplace` [plugin Latte|https://plugins.jetbrains.com/plugin/24218-latte-support] nebo [Latte+|https://plugins.jetbrains.com/plugin/34056-latte-]
- VS Code: nainstalujte [Nette Latte + Neon|https://marketplace.visualstudio.com/items?itemName=Kasik96.latte], [Nette Latte templates|https://marketplace.visualstudio.com/items?itemName=smuuf.latte-lang] nebo nejnovější [Nette for VS Code |https://marketplace.visualstudio.com/items?itemName=franken-ui.nette-for-vscode] plugin
- NetBeans IDE: nativní podpora Latte je součástí instalace
- Sublime Text 3: v Package Control najděte a nainstalujte balíček `Nette` a zvolte Latte ve `View > Syntax`
- ve starých editorech použijte pro soubory .latte zvýrazňování Smarty
Plugin pro PhpStorm je velmi pokročilý a umí výborně napovídat PHP kód. Aby fungoval optimálně, používejte [typované šablony|type-system].
[* latte-phpstorm-plugin.webp *]
Podporu pro Latte najdete také ve webovém zvýrazňovači kódu [Prism.js|https://prismjs.com/#supported-languages] a editoru [Ace|https://ace.c9.io].
Latte uvnitř JavaScriptu nebo CSS
=================================
Latte lze velmi pohodlně používat i uvnitř JavaScriptu nebo CSS. Jak se však vyhnout situaci, kdy by Latte mylně považovalo JavaScriptový kód nebo CSS styl za Latte značku?
```latte
<style>
/* CHYBA: interpretuje jako značku {color} */
body {color: blue}
</style>
<script>
// CHYBA: interpretuje jako značku {id}
var obj = {id: 123};
</script>
```
**Varianta 1**
Vyhněte se situaci, kdy následuje písmeno hned za `{`, třeba tím, že před něj vložíte mezeru, odřádkování nebo uvozovku:
```latte
<style>
body {
color: blue
}
</style>
<script>
var obj = {'id': 123};
</script>
```
**Varianta 2**
Zcela vypněte zpracování Latte značek uvnitř elementu pomocí [n:syntax |tags#syntax]:
```latte
<script n:syntax="off">
var obj = {id: 123};
</script>
```
**Varianta 3**
Přepněte uvnitř elementu syntaxi Latte značek na zdvojené složené závorky:
```latte
<script n:syntax="double">
var obj = {id: 123}; // tohle je JavaScript
{{if $cond}} alert(); {{/if}} // tohle je Latte
</script>
```
V JavaScriptu [se nepíší uvozovky kolem proměnné |tags#Vypsání v JavaScriptu].
Náhrada `use` klauzule v Latte
==============================
Jak v Latte nahradit klauzule `use`, které se používají v PHP, abyste nemuseli při přístupu ke třídě psát celý jmenný prostor? Příklad v PHP:
```php
use Pets\Model\Dog;
if ($dog->status === Dog::StatusHungry) {
// ...
}
```
**Varianta 1**
Místo klauzule `use` si uložíme název třídy do proměnné a následně místo `Dog` používáme `$Dog`:
```latte
{var $Dog = Pets\Model\Dog::class}
<div>
{if $dog->status === $Dog::StatusHungry}
...
{/if}
</div>
```
**Varianta 2**
Pokud je objekt `$dog` instancí `Pets\Model\Dog`, pak lze použít `{if $dog->status === $dog::StatusHungry}`.
Generování XML v Latte
======================
Latte může generovat jakýkoli textový formát (HTML, XML, CSV, iCal atd.), nicméně aby správně escapovalo vypisovaná data, musíme mu říct, jaký formát generujeme. K tomu slouží značka [`{contentType}` |tags#contentType].
```latte
{contentType application/xml}
<?xml version="1.0" encoding="UTF-8"?>
...
```
Poté můžeme například vygenerovat sitemapu podobným způsobem:
```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>
```
Předání dat z inkludované šablony
=================================
Proměnné, které vytvoříme pomocí `{var}` či `{default}` v inkludované šabloně, existují jen v ní a nejsou v inkludující šabloně k dispozici. Pokud bychom si chtěli z inkludované šablony předat zpátky do inkludující nějaká data, jednou z možností je předat do šablony objekt a do něj data vložit.
Hlavní šablona:
```latte
{* vytvoří prázdný objekt $vars *}
{var $vars = (object) null}
{include 'included.latte', vars: $vars}
{* nyní obsahuje property foo *}
{$vars->foo}
```
Inkludovaná šablona `included.latte`:
```latte
{* zapíšeme data do property foo *}
{var $vars->foo = 123}
```
{{maintitle: Tipy a triky pro Latte: pluginy do IDE, JavaScript a XML}}
{{description: Pluginy pro Latte do PhpStormu a dalších editorů, Latte uvnitř JavaScriptu a CSS, generování XML, náhrada klauzule use a předávání dat mezi šablonami.}}
Tipy a triky
Editory a IDE
Pište šablony v editoru nebo IDE, který má podporu pro Latte. Bude to mnohem příjemnější.
PhpStorm: nainstalujte v Settings > Plugins > Marketplaceplugin Latte nebo Latte+
NetBeans IDE: nativní podpora Latte je součástí instalace
Sublime Text 3: v Package Control najděte a nainstalujte balíček Nette a zvolte Latte
ve View > Syntax
ve starých editorech použijte pro soubory .latte zvýrazňování Smarty
Plugin pro PhpStorm je velmi pokročilý a umí výborně napovídat PHP kód. Aby fungoval optimálně, používejte typované šablony.
Podporu pro Latte najdete také ve webovém zvýrazňovači kódu Prism.js a editoru Ace.
Latte uvnitř JavaScriptu nebo CSS
Latte lze velmi pohodlně používat i uvnitř JavaScriptu nebo CSS. Jak se však vyhnout situaci, kdy by Latte mylně
považovalo JavaScriptový kód nebo CSS styl za Latte značku?
<style>
/* CHYBA: interpretuje jako značku {color} */
body {color: blue}
</style>
<script>
// CHYBA: interpretuje jako značku {id}
var obj = {id: 123};
</script>
Varianta 1
Vyhněte se situaci, kdy následuje písmeno hned za {, třeba tím, že před něj vložíte mezeru,
odřádkování nebo uvozovku:
<style>
body {
color: blue
}
</style>
<script>
var obj = {'id': 123};
</script>
Varianta 2
Zcela vypněte zpracování Latte značek uvnitř elementu pomocí n:syntax:
<script n:syntax="off">
var obj = {id: 123};
</script>
Varianta 3
Přepněte uvnitř elementu syntaxi Latte značek na zdvojené složené závorky:
<script n:syntax="double">
var obj = {id: 123}; // tohle je JavaScript
{{if $cond}} alert(); {{/if}} // tohle je Latte
</script>
Pokud je objekt $dog instancí Pets\Model\Dog, pak lze použít
{if $dog->status === $dog::StatusHungry}.
Generování XML v Latte
Latte může generovat jakýkoli textový formát (HTML, XML, CSV, iCal atd.), nicméně aby správně escapovalo vypisovaná
data, musíme mu říct, jaký formát generujeme. K tomu slouží značka {contentType}.
Proměnné, které vytvoříme pomocí {var} či {default} v inkludované šabloně, existují jen
v ní a nejsou v inkludující šabloně k dispozici. Pokud bychom si chtěli z inkludované šablony předat zpátky do
inkludující nějaká data, jednou z možností je předat do šablony objekt a do něj data vložit.
Hlavní šablona:
{* vytvoří prázdný objekt $vars *}
{var $vars = (object) null}
{include 'included.latte', vars: $vars}
{* nyní obsahuje property foo *}
{$vars->foo}
Inkludovaná šablona included.latte:
{* zapíšeme data do property foo *}
{var $vars->foo = 123}