Nasveti in triki

Urejevalniki in IDE

Pišite predloge v urejevalniku ali IDE, ki ima podporo za Latte. Bo veliko prijetneje.

  • PhpStorm: namestite v Settings > Plugins > Marketplace plugin Latte
  • VS Code: namestite Nette Latte + Neon, Nette Latte templates ali najnovejši Nette for VS Code plugin
  • NetBeans IDE: izvorna podpora Latte je del namestitve
  • Sublime Text 3: v Package Control poiščite in namestite paket Nette ter izberite Latte v View > Syntax
  • v starih urejevalnikih uporabite za datoteke .latte poudarjanje Smarty

Plugin za PhpStorm je zelo napreden in zna odlično predlagati kodo PHP. Da bi deloval optimalno, uporabljajte tipizirane predloge.

Podporo za Latte najdete tudi v spletnem poudarjalniku kode Prism.js in urejevalniku Ace.

Latte znotraj JavaScripta ali CSS

Latte je mogoče zelo udobno uporabljati tudi znotraj JavaScripta ali CSS. Kako pa se izogniti situaciji, ko bi Latte napačno razumel JavaScript kodo ali CSS stil kot oznako Latte?

<style>
	/* NAPAKA: interpretira kot oznako {color} */
	body {color: blue}
</style>

<script>
	// NAPAKA: interpretira kot oznako {id}
	var obj = {id: 123};
</script>

Varianta 1

Izognite se situaciji, ko sledi črka takoj za {, na primer tako, da pred njo vstavite presledek, prelom vrstice ali narekovaj:

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

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

Varianta 2

Popolnoma izklopite obdelavo oznak Latte znotraj elementa s pomočjo n:syntax:

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

Varianta 3

Preklopite znotraj elementa sintakso oznak Latte na podvojene zavite oklepaje:

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

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

V JavaScriptu se ne pišejo narekovaji okoli spremenljivke.

Nadomestilo klavzule use v Latte

Kako v Latte nadomestiti klavzule use, ki se uporabljajo v PHP, da vam ni treba pisati imenskega prostora pri dostopanju do razreda? Primer v PHP:

use Pets\Model\Dog;

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

Varianta 1

Namesto klavzule use shranimo ime razreda v spremenljivko in nato namesto Dog uporabljamo $Dog:

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

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

Varianta 2

Če je objekt $dog instanca Pets\Model\Dog, potem lahko uporabimo {if $dog->status === $dog::StatusHungry}.

Generiranje XML v Latte

Latte lahko generira kateri koli besedilni format (HTML, XML, CSV, iCal itd.), vendar da bi pravilno ubežal izpisane podatke, mu moramo povedati, kateri format generiramo. Za to služi oznaka {contentType}.

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

Nato lahko na primer generiramo sitemap na podoben način:

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

Prenos podatkov iz vključene predloge

Spremenljivke, ki jih ustvarimo s pomočjo {var} ali {default} v vključeni predlogi, obstajajo samo v njej in niso na voljo v vključujoči predlogi. Če bi želeli iz vključene predloge prenesti nazaj v vključujočo kakšne podatke, je ena od možnosti, da predlogi posredujemo objekt in vanj vstavimo podatke.

Glavna predloga:

{* ustvari prazen objekt $vars *}
{var $vars = (object) null}

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

{* zdaj vsebuje lastnost foo *}
{$vars->foo}

Vključena predloga included.latte:

{* zapišemo podatke v lastnost foo *}
{var $vars->foo = 123}
različica: 3.0