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}
wersja: 3.0