Menu

Home

BredySoft

Tempe = TEMPlate Engine

TEMPE vznikl ve snaze nahradit TENG (Template ENGine). Základní smysl knihovny je tedy shodný, liší se pouze prostředky vyjadřování.

TEMPE je šablonovací engine tedy jazyk pro vytváření webový stránek nebo formátování dokumentů pomocí šablony a dat které se do šablony doplní. Šablonou se zde rozumí textový soubor nebo i řetězec, který obsahuje "špagetový kód" kde větší část tvoří vizuální prvky napsané v jazyce dokumentu a místy se objevuje vynechávka, kam TEMPE doplní výsledná data.

Příklad vynechávky ${prom}

TEMPE však není hloupý doplňovač vynechávek. Obsahuje v sobě jednoduchý skriptovací engine (TEMPE Script), kterým lze data přímo v šabloně nějakým způsobem dále upravovat, zejména v případech, kdy backend tyto data nedodává a musejí se přímo v šabloně dopočítat.

Následující dokumentace by měla přiblížit práci v TEMPE

Vynechávky

V závislosti na nastavení knihovny, šablona může začínat jak ve stavu skriptu, tak ve stavu šablony. Pokud je ve stavu šablony, předpokládá se, že dokument šablony začíná obsahem, který se má přímo přepsat na výstup a do něho jsou vloženy vynechávky. Pokud se začíná ve stavu skriptu, nejprve se text interpretuje jako skript a je třeba do režimu šablony přejít.

Přejít do režimu šablony "{$"

Ukončit režim šablony "$}"

Na rozdíl od běžných zvyklostí, šablony lze do sebe zanořovat, je třeba chápat znaky {$ a $} jako závorky. Vždy je třeba ukončit všechny zanořené šablony

Příklad:

{$ Toto je text, který se přímo opíše na výstup $}

Vložení vynechávky lze provést několikerým způsobem

${prom}  - výstup proměnné
${ ... }  - výstup skriptu 
$prom$ - výstup globální proměnné

Při použití vynechávky se obsah proměnné přímo přepisuje na výstup. Místo proměnné lze ale vložit i delší skript, který po provedení vloží do místa vynechávky výsledek skriptu. Třetí způsob se používá pro vkládání textů ze slovníků. Slovník je realizován v globálním scope (viz dále), do textu se vloží obsah proměnné, pokud existuje, pokud neexistuje, pouze se proměnná vloží do textu

{$ $YOUR_NAME$: ${jmeno} $}

Ve slovníku následne definujeme YOUR_NAME jako Vaše jméno. Proměnná "jmeno" se pak doplní do textu a výsledkem může být řetězec

Vaše jméno: Ondra

(Znak '$' funguje jako escape znak. Používá se právě jediný znak aby se maximálně redukovala nutnost escapovat uvnitř šablon. Escape sekvence jsou ${ - začátek vynechávky, $} - konec šablony, $$ - znak $ a pak $ následovaný libovolným znakem a ukončen opět $ čímž se vyznačuje slovníková vynechávka)

Implicití a explicitní konverze

Při návrhu engine bylo myšleno i na to, že bude potřeba vkládat text, který by mohl narušit formátování dokumentu vyhrazenými znaky. Proto šablony umožňují specifikovat typ výsledného formátu a tím zajistit konverze textu a escapování. Na začátek šablony nebo vynechávky lze specifikovat formát, do kterého se má výsledek převést.

Začátek šablony určuje, v jakém formátu je celá šablona

{$\ Tato šablona je v prostém textu, žádné escapování
{$html\ Tato šablona je v HTML, escapuj špičaté závorky
{$xml\ Tato šablona je v HTML, escapuj špičaté závorky
{$js\ Tato šablona je Javascript, escapuj uvozovky
{$uri\ Tato šablona je URL, proveď url-enkódování
{$base64\ Tato šablona je base64
{$hex\ Tato šablona obsahuje HEX čísla
{$void\ Způsobí, že se všechny vynechávky nahradí prázdnem

Specifikování formátu na začátku šablony postihne všechny vynechávky v šabloně. Tomu se říká implicitní konverze. Formát lze však specifikovat i explicitně přímo ve vynechávce

${html\prom}

Výše uvedený zápis zapíše na výstup obsah proměnné escapovanou do HTML

${\prom}

Výše uvedený zápis zapíše obsah proměnné tak jak je, bez escapování

${void\ ... }

Výše uvedený zápis nezapíše nic. Hodí se, pokud potřebujeme, aby skript něco spočítal, ale nezapisoval výsledek do šablony

Specifikaci formátu lze použít i u slovníkové vynechávky

$html\YOUR_NAME$

Změna formátu uprostřed šablony

Pokud je třeba měnit formát uprostřed šablony, lze použít vložení šablony do šablony

{$html\ šablona v html ${\{$js\ šablona v javascriptu $}} pokračuje šablona v html $}

Jedná se vlastně o vnoření vynechávky, která obsahuje šablonu. Zpětné lomítko v zápise ${\${ vypíná escapování html, jinak by se výsledná šablona escapovala do html.

Další možností je použít operátor + a sloučit dvě šablony

{$html\ šablona v html $}+{$js\ šablona v javascriptu $}

Vnořené šablony a opakování

Často je nutné vložit část šablony opakovaně podle počtu dat. Počet opakování se řídí proměnnou, která obsahuje pole objektů. Proměnná se v programu vytváří jako JSON-array obsahující položky JSOIN-object. Pro každou položku je vytvořen [scope] a v něm provedena šablona včetně nahrazování vynechávek

{$html\<table>${\frag prom {$html\<tr><td>${sloupec1}</td><td>${sloupec2}</td></tr>$}}</table>$}

V zápisu "${\frag" představuje vložení fragmentu s vypnutím escapováním. Následuje proměnná, která se má zpracovat a šablona, která se má provést pro každý řádek v proměnné frag. Proměnné "sloupec1" a "sloupec2" jsou položkamy každého prvku pole, například takto

{
     "prom": [
              {"sloupec1":10, "sloupec2":"aaaa"}, 
              {"sloupec1":20, "sloupec2":"bbbb"},
             ]
}

výsledek

<table>
     <tr><td>10</td><td>aaaa</td><tr>
     <tr><td>20</td><td>bbbb</td><tr>
</table>

(po sformátování výstupu)

Šablona jako funkce

Skriptovací jazyk považuje šablony za jazykové konstrukty a proto lze s nimi pracovat na úrovni skriptu. Šablona je objekt, který vrací svůj obsah. Pokud tedy napíšeme

prom:={$ Toto je šablona s hodnotou: ${prom2}$}

Pak se do "prom" uloží výsledný text šablony s doplněnou vynechávkou. Proměnnou "prom" lze posléze vkládat do jiné šablony.

Díky možnosti ve skriptovacím jazyce vytvářet funkce, lze šablonu vytvořit jako funkci.

sablona1:=function(in prom2) 
    {$ Toto je šablona s hodnotou: ${prom2}$} 
end

Šablonu lze vložit do jiné šablony

{$ Vlozena sablona: ${\sablona1("ahoj")} a dalsi ${\sablona1("cau")} $}

TEMPE Script

[Struktura]