Советы и рекомендации

Редакторы и IDE

Пишите шаблоны в редакторе или IDE, в которых есть поддержка Latte. Это будет намного приятнее.

  • NetBeans IDE имеет встроенную поддержку
  • PhpStorm: установите плагин Latte в Settings > Plugins > Marketplace
  • VS Code: поиск маркерплейса для плагина Nette Latte + Neon или шаблонов Nette Latte
  • Sublime Text 3: в Package Control найдите и установите пакет Nette и выберите Latte in View > Syntax
  • в старых редакторах используйте подсветку Smarty для файлов .latte

Плагин для PhpStorm очень продвинутый и может отлично подсказывать PHP код. Для оптимальной работы используйте типизированные шаблоны.

Поддержку Latte также можно найти в веб-выделителе кода Prism.js и редакторе Ace.

Latte Inside JavaScript или CSS

Latte можно очень удобно использовать внутри JavaScript или CSS. Но как избежать того, чтобы Latte ошибочно считал код JavaScript или стиль CSS тегом Latte?

<style>
	/* ERROR: interprets as tag {color} */
	body {color: blue}
</style>

<script>
	// ERROR: interprets as tag {id}
	var obj = {id: 123};
</script>

Вариант 1

Избегайте ситуаций, когда буква следует сразу за {, вставляя между ними пробел, перенос строки или кавычки:

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

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

Вариант 2

Полностью отключить обработку тегов Latte внутри элемента с помощью n:syntax:

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

Опция 3

Переключите синтаксис тега Latte на двойные фигурные скобки внутри элемента:

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

	{{if $cond}} alert(); {{/if}} // this is Latte tag
</script>

В JavaScript не заключайте переменную в кавычки.

Замена для пункта use

Как заменить клаузулу use, используемую в PHP, чтобы не писать пространство имен при обращении к классу? Пример PHP:

use Pets\Model\Dog;

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

Вариант 1

Вместо пункта use сохраните имя класса в переменной, а затем вместо Dog используйте $Dog:

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

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

** Вариант 2**

Если объект $dog является экземпляром Pets\Model\Dog, то можно использовать {if $dog->status === $dog::StatusHungry}.

Генерация XML в Latte

Latte может генерировать любой текстовый формат (HTML, XML, CSV, iCal и т.д.), однако для того, чтобы правильно вывести отображаемые данные, мы должны указать ему, какой формат мы генерируем. Для этого используется тег {contentType} используется для этого.

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

Затем, например, мы можем сгенерировать карту сайта аналогичным образом:

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

Передача данных из включенного шаблона

Переменные, которые мы создаем с помощью {var} или {default} во включенном шаблоне, существуют только в нем и недоступны во включающем шаблоне. Если мы хотим передать некоторые данные из включаемого шаблона обратно в включающий, один из вариантов – передать в шаблон объект и установить в него данные.

Основной шаблон:

{* creates an empty object $vars *}
{var $vars = (object) null}

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

{* now contains property foo *}
{$vars->foo}

Включенный шаблон included.latte:

{* write data to the property foo *}
{var $vars->foo = 123}
версия: 3.0