Поради та підказки

Редактори та IDE

Пишіть шаблони в редакторі або IDE, який має підтримку Latte. Це буде набагато приємніше.

  • PhpStorm: встановіть у Settings > Plugins > Marketplace plugin 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}
версія: 3.0