Porady i sztuczki
Edytory i IDE
Szablony pisz w edytorze lub IDE, które obsługuje Latte. Będzie o wiele przyjemniej.
- PhpStorm: zainstaluj plugin Latte w
Settings > Plugins > Marketplace - VS Code: zainstaluj Nette Latte + Neon, Nette Latte templates albo najnowszy plugin Nette for VS Code
- NetBeans IDE: natywna obsługa Latte jest częścią instalacji
- Sublime Text 3: w Package Control znajdź i zainstaluj pakiet
Nette, a wView > Syntaxwybierz Latte - w starszych edytorach używaj dla plików
.lattepodświetlania Smarty
Plugin do PhpStorm jest bardzo zaawansowany i potrafi doskonale podpowiadać kod PHP. Aby działał optymalnie, używaj typowanych szablonów.

Obsługę Latte znajdziesz też w webowym podświetlaczu kodu Prism.js i w edytorze Ace.
Latte wewnątrz JavaScriptu lub CSS
Latte da się bardzo wygodnie używać wewnątrz JavaScriptu lub CSS. Jak jednak uniknąć sytuacji, w której Latte omyłkowo uzna kod JavaScriptu albo style CSS za tagi Latte?
<style>
/* BŁĄD: zinterpretuje jako tag {color} */
body {color: blue}
</style>
<script>
// BŁĄD: zinterpretuje jako tag {id}
var obj = {id: 123};
</script>
Możliwość 1
Unikaj sytuacji, w których bezpośrednio po { następuje litera, na przykład wstawiając przed nią spację,
nowy wiersz albo cudzysłów:
<style>
body {
color: blue
}
</style>
<script>
var obj = {'id': 123};
</script>
Możliwość 2
Całkowicie wyłącz przetwarzanie tagów Latte wewnątrz elementu za pomocą n:syntax:
<script n:syntax="off">
var obj = {id: 123};
</script>
Możliwość 3
Przełącz składnię tagów Latte wewnątrz elementu na podwójne klamry:
<script n:syntax="double">
var obj = {id: 123}; // to jest JavaScript
{{if $cond}} alert(); {{/if}} // to jest tag Latte
</script>
W JavaScripcie nie umieszczaj zmiennej w cudzysłowach.
Zamiennik klauzuli use w Latte
Czym w Latte zastąpić klauzule use używane w PHP, aby przy odwołaniu do klasy nie trzeba było pisać
przestrzeni nazw? Przykład w PHP:
use Pets\Model\Dog;
if ($dog->status === Dog::StatusHungry) {
// ...
}
Możliwość 1
Zamiast klauzuli use zapisz nazwę klasy do zmiennej, a następnie używaj $Dog zamiast
Dog:
{var $Dog = Pets\Model\Dog::class}
<div>
{if $dog->status === $Dog::StatusHungry}
...
{/if}
</div>
Możliwość 2
Jeśli obiekt $dog jest instancją Pets\Model\Dog, można użyć
{if $dog->status === $dog::StatusHungry}.
Generowanie XML w Latte
Latte potrafi generować dowolny format tekstowy (HTML, XML, CSV, iCal itd.), ale aby poprawnie escapować wypisywane dane,
musimy mu powiedzieć, jaki format generujemy. Służy do tego tag {contentType}.
{contentType application/xml}
<?xml version="1.0" encoding="UTF-8"?>
...
Następnie możemy w podobny sposób wygenerować na przykład mapę strony:
{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 utworzone przez {var} albo {default} w dołączonym szablonie istnieją tylko w tym szablonie
i nie są dostępne w szablonie dołączającym. Jeśli chcesz przekazać jakieś dane z dołączonego szablonu z powrotem do
dołączającego, jedną z możliwości jest przekazanie do szablonu obiektu i zapisanie danych do niego.
Szablon główny:
{* tworzymy pusty obiekt $vars *}
{var $vars = (object) null}
{include 'included.latte', vars: $vars}
{* teraz zawiera właściwość foo *}
{$vars->foo}
Dołączony szablon included.latte:
{* zapisujemy dane do właściwości foo *}
{var $vars->foo = 123}