Съвети и трикове
Редактори и IDE
Пишете шаблони в редактор или IDE, който поддържа Latte. Това ще бъде много по-приятно.
- NetBeans IDE има вградена поддръжка за
- PhpStorm: инсталирайте приставката Latte
в
Settings > Plugins > Marketplace
- VS код: търсене на маркерплейс за плъгин за шаблони Nette Latte + Neon или Nette Latte
- Sublime Text 3: в Управление на пакетите намерете и инсталирайте пакета
Nette
и изберете Latte вView > Syntax
- в по-стари редактори използвайте Smarty за подчертаване на .latte файлове
Плъгинът за PhpStorm е много усъвършенстван и може перфектно да предлага PHP код. Използвайте типизирани шаблони за оптимална производителност.
Поддръжката на Latte може да бъде намерена и в разделителя на уеб код Prism.js и редактора Ace.
Latte в JavaScript или CSS
Latte може да се използва много удобно в JavaScript или CSS. Но как можете да избегнете погрешното третиране на кода на JavaScript или стиловете на CSS от Latte като тагове на 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}
в шаблона
за разрешаване, съществуват само в шаблона за разрешаване и не са
достъпни в шаблона за разрешаване. Ако искаме да предадем някакви
данни от активирания шаблон обратно към активирания шаблон, една от
възможностите е да предадем обект на шаблона и да зададем данните
към него.
Основен шаблон:
{* създава празен обект $vars *}
{var $vars = (object) null}
{include 'included.latte', vars: $vars}
{* сега съдържа свойството foo *}
{$vars->foo}
Включен шаблон included.latte
:
{* запис на данни в имота foo *}
{var $vars->foo = 123}