Šablony – šablonovací jazyk

Cílem šablony je poskytnout co nejjednodušší prezentování získaných dat. Nové verze šablon implementují nový šablonovací jazyk, který je velmi blízký Smarty šablonám. Více vám snad napoví tento přehled.

Základní konstrukce

Vypsání proměnné, podmínky, cykly:

  • {$var} – vypíše escapovanou proměnnou
  • {if $var == "test"} otevření podmínky, nutno ukončit pomocí {/if}
    • {elseif $var == "jiny"} – rozšíření pomínek
    • {else}
  • {foreach $array as $key => $val} – cyklus, ukončit pomocí {/foreach}
  • {while !empty($array)} – cyklus, ukončit pomocí {/while}
  • {break}, {continue}

Na této stránce bude daný blok ohraničený {} nazýván tagem.

Seznam předdefinovaných funkcí a triggerů naleznete na zvláštní manuálové stránce Funkce a triggery.

Filtry

Díky filtrům jednoduše upravíte svůj výstup. Pokud vypisujete proměnnou, pak je defaultně zapnut filrt escape. Jako filtr můžete použít jakoukoliv php funkci, vlastní funkci, nebo si můžete i zaregistrovat metodu vlastního objektu (helperu). Posledním způsobem je zaregistrován FilterHelper, který doplňuje nejběžnější filtry, které byste mohli potřebovat.

Filtry se zapisují za název proměnné, pomocí dvojteček můžete přidávat parametry:

{$content|nl2br}
{$content|trim}

# filtr s parametry
{$db_date|date:"d.m.Y H:i"}
{$content|sub_str:8:-9}

# vice filtru
{$array|shuffle|implode:" + "}

Veškeré výše uvedené ukázky jsou navíc escapovány filtrem escape v režimu Html. Tento filtr obsahuje ještě režimy js a css. Pokud chcete escapování vypnout, použijte filtr raw.

{$html_content|raw}

Pomocí této syntaxe můžete vypisovat vše, co začíná proměnnou, i když je v ní třeba uloženo pole nebo objekt.

{$result->user->name}
{$result->page_content|raw}

# helpery
{$html->link('uvod', 'Úvod')}

U Helperů neprobíhá automatický escape! Pokud je třeba, musíte jej provést samo pomocí filtru escape. Filozofie Helperů je taková, že by již měly generovat bezpečný kód. Tak jsou také naprogramovány helpery, které Háefko framework obsahuje.

Můžete také vypnout escapování pro vámi definovanou proměnnou pomocí triggeru noEscape.

{noEscape $form}
{$form['username']->control}

Zaregistrování vlastního filtru

Pokud je filtrem funkce, nemusíte ji registrovat. Pokud je jím metoda, již je třeba registrace:

# jen pro konkrétní instanci
$template->tplFilters['mojeFunkce'] = '$mujObjekt->mojeFunkce';

# pro vsechny nove template
Template::$defaultTplFilters['mojeFunkce'] = '$mujObjekt->mojeFunkce';

Funkce

Další syntaktickou pomůckou jsou funkce. Pomocí funkcí můžete volat zkráceně různé metody. Pro funkce fungují filtry naprosto normálně.

{include 'subtemplate.phtml'}

Podívejme se na definici funkce:

$template->tplFunctions['include'] = '$template->subTemplate'

Veškerý zbylý obsah tagu (argumenty) je pak předán nadefinované funkci.

Triggery

Jak je vidět, funkce slouží pouze pro primitivní zkrácení. Pokud chcete obsah tagu parsovat sofistikovaněji. Jednoduše přidáváte callbacky, které budou volány s jedním parametrem, ve kterém bude obsah vlastního triggeru. Tento obsah můžete zpracovat podle potřeby, dále můžete vrátit nějaký string, nebo pouze provést potřebnou akci.

$template->tplTriggers['eval'] = array('MyTemplateHelper', 'evalCb');

class MyTemplateHelper
{
    public function evalCb($expression)
    {
        return "<?php eval('?>' . $expression) ?>";
    }
}