Autor: JIz

Oddělení textu od kódu

Obsahem šablony je jednak text, jednak TFS kód. Textem se tu rozumí posloupnost libovolných znaků, která se většinou kopíruje na výstup bez jakýchkoli modifikací (ale v závislosti na kontextu se může kopírovat jednou, vicekrát, ale také třeba vůbec ne). Kódem se tu rozumí posloupnost tokenů, kterými je definovaná prezentační logika šablony.

Pravidla syntaxe TFS šablon jsou optimalizovaná pro výstup v (X)HTML. Šablona může obsahovat téměř libovolné znaky v libovolném pořadí. Tyto znaky tvoří text. V této posloupnosti mohou být obsažené části, které se zpracovávají podle odlišných pravidel.

Příklad: Běžný text v těle šablony

<html>
<head>
  <title>Not Found</title>
</head>
<body>
  <p>Page could not be found.</p>
</body>
</html>

Text se vypisuje tak, jak je.

Speciálním způsobem se v této posloupnosti zpracovává:

  • kód ohraničený složenými závorkami (vyjma zdvojené),
  • blok s vyznačeným odlišné syntaxe,
  • obsah HTML elementu <style>,
  • obsah HTML elementu <script>.

Kód ohraničený složenými závorkami je libovolná posloupnost platných tokenů kódu.

Příklad: Kód ohraničený složenými závorkami

{/* Error Page */}
<html>
<head>
  <title>Not Found</title>
</head>
<body>
  <p>Page could not be found.</p>
</body>
</html>

Před text je vložený kód obsahující jako jediný token komentář.

Pokud jsou složené závorky zdvojené, reprezentují jednoduché složené závorky jako znaky běžného textu.

Příklad: Zdvojené složené závorky

<html>
<head>
  <title>Not Found</title>
</head>
<body onload="for(x=0;x<5;x++){{alert('oops');}}">
  <p>Page could not be found.</p>
</body>
</html>

Při výpisu textu se zdvojené složené závorky nahradí jednoduchými.

Blok s vyznačeným odlišné syntaxe je uvozený počáteční posloupností znaků {<? a ukončený posloupností znaků ?>}. V něm se znaky { a } chovají jako běžná součást textu a jejich roli přebírají po řadě dvojice znaků <? a ?>. Toto nastavení je užitečné zejména v případě, že šablona vypisuje CSS nebo javascript.

Příklad: Výpis CSS šablonou

{<?

body { background: transparent url('<?
  ref(_template.verticalGradient)
?>') repeat-x left top; }

?>}

HTML elementy <script> a <style> podléhají zvláštnímu režimu zpracování, aniž by bylo třeba explicitně vyznačovat odlišnou syntax.

Příklad: Styl

<html>
<head>
  <title>Not Found</title>
  <style type="text/css">

body { background: transparent url('<?
  ref(_template.verticalGradient)
?>') repeat-x left top; }

  </style>
</head>
<body>
  <p>Page could not be found.</p>
</body>
</html>

Implicitní přepnutí do režimu odlišné syntaxe se týká jen textu obsaženého v elementech. Jejich HTML atributy se zpracovávají podobně jako běžný mark-up.

Příklad: Externí skript

<html>
<head>
  <title>Not Found</title>
  <script type="text/javascript"
    src="{ref(_template.script)}"></script>
</head>
<body>
  <p>Page could not be found.</p>
</body>
</html>
Pro vložení příspěvku do diskuse se přihlašte.