Hlavní navigace

Šablony stránek pro Zope: syntaktická pravidla

25. 4. 2003
Doba čtení: 3 minuty

Sdílet

Šablony ZPT mají jednoduchou, ale poměrně neobvyklou syntaxi. V této části seriálu uvidíte praktický příklad šablony, která dělá užitečnou činnost: automatickou tvorbu navigace pro web. Ale nejprve si přehledně popíšeme syntaktická pravidla šablon ZPT.

Syntaxe šablon ZPT

V minulém pokračování jsme viděli jednu z nejjednodušších značek ZPT, jak vypadá uvnitř jednoduchého kódu HTML:

<b tal:content="template/title">Název šablony</b>

Podívejme se na strukturu výše uvedené značky ZPT samotné, bez HTML:

 tal:content="template/title"

Značka jazyka ZPT se skládá ze tří prvků: povinného symbolu tal:, výrazu podle syntaxe TALES (například template/title) a příkazu jazyka šablon ZPT (například content).

  • Každá značka jazyka ZPT začíná na tal:. Tím je řečeno, že zbytek značky je ve jmenném prostoru XML. To v praxi znamená, že webové editory takové značce nerozumějí, a proto ji nebudou odstraňovat ani upravovat.
  • Zbytek šablony je podobný normálnímu přiřazovacímu příkazu. template/title je obsah položky content. Ani jedno z těchto tří slov není náhodné; naopak jsou to všechno klíčová slova.
  • template/title je výraz, a tento konkrétní výraz říká, že se použije položka title ze samotné šablony (template). Tomuto zápisu s lomítkem se výstižně říká cesta (path) a skutečně existují cesty s více než jedním lomítkem. V jazyce ZPT je definováno několik různých cest. Některé z nich si popíšeme později. Cesta oddělená lomítky je pouze jedním z celkem pěti různých typů přípustných výrazů.
  • content je příkaz ZPT. Tento konkrétní příkaz říká, že Zope vloží interpretovaný obsah výrazu (template/title) jako obsah původní značky HTML, což je v našem případě značka <b></b>. Kdybychom místo příkazu content použili příkaz replace, postará se Zope o to, aby původní značka HTML úplně zmizela a byla nahrazena pouze interpretovaným obsahem samotným. Kromě content a replace existuje jen šest dalších příkazů jazyka šablon ZPT.

Jak jsem uvedl výše, template/title je výraz typu cesta. Dalším přípustným typem výrazu je výraz typu python. Vyzkoušejte si zadat do šablony následující dva řádky, které demonstrují základní možnosti práce jazyka Python s řetězci:

<b tal:content="python:len('abcdef')">Délka řetězce</b><br>

<b tal:content="python:'abcdef'[1:4]">Část řetězce</b><br>

Jazyk Python je pro profesionální práci se Zope naprosto nezbytný. Naštěstí snad neexistuje jiný jazyk, který se dá naučit tak snadno jako Python. Pro aktuální verzi jazyka Python existuje kvalitní dokumentace. Pro začátek úplně postačí, když si přečtete o metodách pro zpracování řetězců.

Můžete si také přečíst překlad originální dokumentace Pythonu do češtiny a seriál Létající cirkus. Oba materiály jsou výborné. Autorem je Jan Švec.

Automatická navigace

Když teď znáte základní filozofii jazyka ZPT, můžeme zkusit něco praktického. Co třeba programování navigace po webových stránkách? V následujícím příkladu vytvoříme navigaci pro libovolně rozsáhlý web naprosto automaticky. Než se pustíme do samotného programování, bude nutné vytvořit jednoduchou infrastrukturu jako příklad rozsáhlého webu.

Nejprve ve složce test vytvořte následující strukturu složek:

root_podpora

t1

Do některých složek vložte 2–3 obrázky, jiné složky nechte prázdné. Například vložte obrázky do složek /test, /test/t1, a /test/t1/t11. Obrázky by měly být malé (nanejvýš 30×30 obrazových bodů), aby se vešly na obrazovku, kterou bude generovat šablona představená ve třetí části tohoto seriálu článků. Pak se vraťte do složky test a vložte novou šablonu ZPT (Page Template). Pozor na její název (Id): Id pro tuto šablonu musí být index_html. Obsah šablony bude následující:

<div tal:define="slozky
python:here.objectValues('Folder')">
  <ul tal:condition="slozky">

    <li tal:repeat="slozka slozky">
      <a href="slozka"
           tal:attributes="href slozka/absolute_url"

           tal:content="slozka/getId">ID slozky</a>
    </li>
  </ul>

  <p tal:condition="not:slozky"><b>Zde nejsou žádné složky.</b></p>
</div>

Můžete rovnou klepnout na záložku Test a vyzkoušet si, že tato šablona umožňuje procházet složky, protože automaticky generuje potřebné kotvy HTML, neboli odkazy <A HREF=…>.

Byl pro vás článek přínosný?