##################
Syntax
##################
Šablony používají syntax Twig (http://twig.sensiolabs.org/), kterou dále rozšiřují o specifické funkce. Tato dokumentace obsahuje pouze tyto nadstavbové funkce a doporučujeme nejprve se seznámit se základní syntaxí Twig: http://twig.sensiolabs.org/doc/templates.html
============================
Validita šablon
============================
Všechny šablony prochází zpracováním DOM parseru, takže musí být validní. Není možné křížit tagy a všechny tagy otevřené v jednom souboru by měly být ve stejném souboru i uzavřeny.
Zpracování šablon respektuje HTML5 specifikaci, takže není potřeba uzavírat tagy IMG, INPUT, BR, HR a podobně.
Důsledkem parsování šablon může být neočekávané chování - například v případě použití DIV uvnitř P
.. code-block:: html+twig
{# zápis v šabloně #}
Hello!
Hi!
Skutečný výstup:
.. code-block:: xml
Hello!
Hi!
Podle HTML5 specifikace DIV nemůže být uvnitř odstavce, takže je odstavec ukončen, jakmile narazí na DIV.
Následující zápisy nelze v šablonách použít
.. code-block:: html+twig
{# nevalidní tag #}
{# chybné uvozovky - ve twigu stačí použít apostrof #}
====================
Struktura šablony
====================
Některé zápisy sice projdou validací, ale není doporučené je používat. Například tento zápis je sice validní, ale jeho použití může způsobit problémy.
.. code-block:: html+twig
{# chybný zápis #}
{%if user %}
{%endif%}
{%include this.template %}
{%if user %}
{%endif%}
Doporučený způsob zápisu:
.. code-block:: html+twig
{# správný zápis #}
{%if user %}
{%include this.template %}
{%else%}
{%include this.template %}
{%endif%}
Pokud je potřeba mít různou strukturu dle podmínek, je nejpraktičtější mít definici celé struktury na jednom místě. Například v jednom souboru mít pouze podmínky a kód šablony rozdělit na makra/soubory.
Výsledný kód je výrazně přehlednější a zároveň nejsou problémy při zpracování šablony.
=====================
Podmíněné atributy
=====================
Použitím prefixu *if:* lze podmínit vypsání atributu. Hodnotou atributu je twig kód (bez {{}}), který může obsahovat buď jenom podmínku (pro použití u checked, selected, ...) nebo podmínku a hodnotu.
.. code-block:: html+twig
{# výstup: #}
{# výstup: #}