02/2016 / Milan "perún" Herda / @moriquend / hrad.perunhq.org
composer require latte/latte
$latte = new Latte\Engine;
$latte->setTempDirectory('/latte/cache/dir');
$latte->render(
'templates/example.latte',
[
'user' => $user,
'items' => $items,
]
);
Pozor: Metóda render
zapisuje (echo) priamo na výstup!
$latte = new Latte\Engine;
$latte->setTempDirectory('/latte/cache/dir');
$output = $latte->renderToString(
'templates/example.latte',
[
'user' => $user,
'items' => $items,
]
);
echo $output;
Je lepšie si pre vytváranie inštancií Latte\Engine
vytvoriť vlastnú Factory
,
do ktorej potom môžeme registrovať vlastné filtre a makrá.
{if count($users)}
<ul>
{foreach $users as $user}
<li n:class="$iterator->last ? last">
{$user->getName()|capitalize}
</li>
{/foreach}
</ul>
{/if}
<ul n:if="count($users)">
<li n:foreach="$users as $user" n:class="$iterator->last ? last">
{$user->getName()|capitalize}
</li>
</ul>
{% if users|length %}
<ul>
{% for user in users %}
<li class="{% if loop.last %}last{% endif %}">
{{ user.name|upper }}
</li>
{% endfor %}
</ul>
{% endif %}
{}
{$foo} | vypíše premennú a escapuje |
{$foo|noescape} | vypíše premennú a nescapuje |
{var $foo = 'bar'} | vytvorí premennú |
{capture $foo}...{/capture} | vytvorí premennú z obsahu vo vnútri hraníc makra |
{if podmienka}...{elseif}...{else}..{/if} | podmienky |
{foreach $items as $item} ... {/foreach} |
foreach cyklus |
{continueIf podmienka} | continue |
{breakIf podmienka} | break |
{sep}...{/sep} | separátor položiek v cykle |
{include 'foo.latte'} | vloží inú šablónu |
{cache $key}...{/cache} | nacachuje časť stránky (pre http cache) |
{_"text"} | preklad reťazov |
{block}...{/block} | definovanie bloku |
{layout 'layout.latte'} | určenie šablóny s layoutom |
{dump $foo} | dump premennej do Tracy |
n:
n:class | priradí tagu triedu, pokiaľ je splnená podmienka |
n:attr | podobne ak n:class, ale pre hocijaký atribút |
n:tag-if | vypíše tag, iba pokiaľ je splnená podmienka |
n:foreach | cyklus |
n:block | nadefinovanie obsahu tagu ako bloku |
Pokiaľ n:makru dáme prefix inner-
, tak sa makro aplikuje iba na obsah tagu
<ul n:inner-foreach="$users as $user">
<li>
{user->getName()}
</li>
</ul>
<li><a href="{$url}" n:tag-if="{$url}">Správy</a></li>
Výsledok bude závisieť od obsahu $url
<li>Správy</li>
<li><a href="/spravy">Správy</li>
Ochráňte kód pred XSS
<style>
h1:after {
content: '{{ title }}';
}
</style>
<button onclick="alert("{{ title }}")">
{{ title }}
</button>
<script>var name = {{ title }};</script>
Ochráňte kód pred XSS
<style>
h1:after {
content: '{{ title|e('css') }}';
}
</style>
<button onclick="alert("{{ title|e('html_attr') }}")">
{{ title }}
</button>
<script>var name = {{ title|e('js') }};</script>
<style>
h1:after {
content: {$title};
}
</style>
<button onclick="alert({$title})">
{$title}
</button>
<script>var name = {$title};</script>
latte samo automaticky oescapuje premenné pre každý kontext