Советы и рекомендации
Редакторы и IDE
Пишите шаблоны в редакторе или IDE, который поддерживает Latte. Это будет гораздо приятнее.
- PhpStorm: установите в
Settings > Plugins > Marketplace
плагин Latte - VS Code: установите Nette Latte + Neon, Nette Latte templates или новейший Nette for VS Code плагин
- NetBeans IDE: встроенная поддержка Latte является частью установки
- Sublime Text 3: в Package Control найдите и установите пакет
Nette
и выберите Latte вView > Syntax
- в старых редакторах используйте для файлов .latte подсветку Smarty
Плагин для PhpStorm очень продвинутый и отлично подсказывает PHP-код. Чтобы он работал оптимально, используйте типизированные шаблоны.

Поддержку Latte вы также найдете в веб-подсветчике кода Prism.js и редакторе Ace.
Latte внутри JavaScript или CSS
Latte можно очень удобно использовать и внутри JavaScript или CSS. Но как избежать ситуации, когда Latte ошибочно примет JavaScript-код или CSS-стиль за тег Latte?
<style>
/* ОШИБКА: интерпретируется как тег {color} */
body {color: blue}
</style>
<script>
// ОШИБКА: интерпретируется как тег {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}; // это JavaScript
{{if $cond}} alert(); {{/if}} // это Latte
</script>
В JavaScript не пишутся кавычки вокруг переменной.
Замена use
в Latte
Как в Latte заменить конструкции 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}
во включенном шаблоне, существуют только в нем и недоступны во
включающем шаблоне. Если бы мы хотели передать какие-либо данные из
включенного шаблона обратно во включающий, одним из вариантов
является передача объекта в шаблон и вставка данных в него.
Основной шаблон:
{* создает пустой объект $vars *}
{var $vars = (object) null}
{include 'included.latte', vars: $vars}
{* теперь содержит свойство foo *}
{$vars->foo}
Включенный шаблон included.latte
:
{* записываем данные в свойство foo *}
{var $vars->foo = 123}