Dicas e truques
Editores e IDE
Escreva os modelos em um editor ou IDE que tenha suporte para Latte. Será muito mais agradável.
- NetBeans IDE tem suporte integrado
- PhpStorm: instale o plugin Latte
Settings > Plugins > Marketplace
- Código VS: procure no markerplace pelo plug-in Nette Latte + Neon ou Nette Latte templates
- Texto Sublime 3: em Package Control find and install
Nette
e selecione Latte inView > Syntax
- em editores antigos usam Smarty highlighting para arquivos .latte
O plugin para PhpStorm é muito avançado e pode perfeitamente sugerir código PHP. Para funcionar de forma ideal, use modelos datilografados.
O suporte para o Latte também pode ser encontrado no código de barras Prism.js e no editor Ace.
Latte Inside JavaScript ou CSS
O Latte pode ser usado com muito conforto dentro do JavaScript ou CSS. Mas como evitar que o Latte seja equivocadamente considerado código JavaScript ou estilo CSS como uma tag Latte?
<style>
/* ERROR: interprets as tag {color} */
body {color: blue}
</style>
<script>
// ERROR: interprets as tag {id}
var obj = {id: 123};
</script>
**Opção 1***
Evite situações em que uma carta siga imediatamente um {
, seja inserindo um espaço, quebra de linha ou aspas
entre eles:
<style>
body {
color: blue
}
</style>
<script>
var obj = {'id': 123};
</script>
**Opção 2***
Desligue completamente o processamento de tags Latte dentro de um elemento usando a sintaxe n:syntax:
<script n:syntax="off">
var obj = {id: 123};
</script>
**Opção 3***
Mude a sintaxe da etiqueta Latte para o elemento de dupla cinta dentro do elemento:
<script n:syntax="double">
var obj = {id: 123}; // this is JavaScript
{{if $cond}} alert(); {{/if}} // this is Latte tag
</script>
Em JavaScript, não coloque variável entre aspas.
Substituição para use
Cláusula
Como substituir as cláusulas use
utilizadas no PHP para que você não tenha que escrever um namespace ao acessar
uma classe? Exemplo em PHP:
use Pets\Model\Dog;
if ($dog->status === Dog::StatusHungry) {
// ...
}
**Opção 1***
Em vez da cláusula use
armazenar o nome da classe em uma variável e depois em vez de Dog
usar
$Dog
:
{var $Dog = Pets\Model\Dog::class}
<div>
{if $dog->status === $Dog::StatusHungry}
...
{/if}
</div>
**Opção 2***
Se o objeto $dog
é uma instância de Pets\Model\Dog
, então
{if $dog->status === $dog::StatusHungry}
pode ser usado.
Geração de XML em Latte
O Latte pode gerar qualquer formato de texto (HTML, XML, CSV, iCal, etc.), no entanto, para escapar adequadamente dos dados
exibidos, devemos dizer-lhe qual formato estamos gerando. O {contentType}
é usada para isso.
{contentType application/xml}
<?xml version="1.0" encoding="UTF-8"?>
...
Então, por exemplo, podemos gerar um mapa do site de maneira semelhante:
{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>
Passagem de dados de um modelo incluído
As variáveis que criamos com {var}
ou {default}
no modelo incluído só existem nele e não estão
disponíveis no modelo incluído. Se quisermos passar alguns dados do modelo incluído de volta ao modelo incluído, uma das
opções é passar um objeto para o modelo e definir os dados para ele.
Modelo principal:
{* cria um objeto vazio $vars *}
{var $vars = (object) null}
{include 'included.latte', vars: $vars}
{* agora contém foo de propriedade *}
{$vars->foo}
Modelo incluído included.latte
:
{* escrever dados para o foo da propriedade *}
{var $vars->foo = 123}