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 wView > 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}