Hlavní navigace

Šablony stránek pro Zope: metajazyk METAL

20. 6. 2003
Doba čtení: 4 minuty

Sdílet

Dnes si představíme další jazyk Zope. Slibuji, že je poslední. Metajazyk METAL nám poslouží k oživení příkladu ilustrujícího udržování stavových informací - a toto udržování je nepostradatelný doplněk pro rozumně fungující webové aplikace.

Protokol HTTP, pomocí kterého se přenášejí webové stránky po internetu, si po přechodu na novou webovou stránku neumí zapamatovat skoro nic z předchozí stránky. Jinými slovy je bezestavový. Webové aplikace musejí toto omezení překonat. K udržení stavových informací  se nejčastěji používají sušenky („cookies“) nebo shluk náhodných znaků doplněných do URL. Udržení stavových informací ukážu naNákupním košíku – ano, notorický recidivista webových aplikací slaví svůj comeback. Prosím všechny zkušené programátory webových aplikací, aby přeskočili následujícící vysvětlující odstavec.

Nákupní košík ztělesňuje schopnost uchovat informace mezi dvěma webovými požadavky – neboli mezi dvěma webovými stránkami. Když nakupujete na webu, většinou ještě nemáte na daném webu účet. Zabloudili jste do nového obchodu a chcete nakupovat, ale pro webovou aplikaci jste anonymní. Přesto byste rádi dostali svůj košík, vkládali do něho zboží, rádi byste občas zkontrolovali, co všechno v košíku už máte, a svoje číslo kreditní karty chcete prozradit až u pokladny – pokud k ní vůbec dospějete, protože možná si to rozmyslíte a nic nekoupíte, nebo vám vyšší moc (Telecom) přeruší linku. Zkrátka jste anonym a webová aplikace je nucena vypálit vám cejch, aby vás poznala. Na výběr má dvě vypalovací železa. Za prvé může na váš pevný disk uložit sušenku (cookie).1 Za druhé může webová aplikace do URL doplnit nějakou náhodnou kombinaci písmen a číslic, která bude vaším cejchem.

Aby to nebylo tak jednoduché, udržení stavových informací (tzv. session management) na příkladu Nákupního košíku provedeme s pomocí dosud nezmíněného doplňku šablon ZPT. Zkrátka dozrál čas na metal. Ne, nevrátím se zpátky do hrobu. METAL je Macro Expansion Tag Attribute Language, tedy makrojazyk pro TAL, základní jazyk ZPT představený v předchozích dílech. Cílem meta-jazyka METAL je zpřehlednění tvorby dynamických webových stránek prostřednictvím zobecnění šablon TAL. Ale proč mluvit teoreticky? Pojďme na to!

<p metal:define-macro="firma">
  Huhlávka a syn, Sentimentální 1938, Žužvíkov
</p>

Výše uvedený zdrojový kód můžete uložit do šablony, která bude skladištem maker typy METAL. Nazvěte ji třeba „sklad“. Můžete do ní beze strachu přidat další definici:

<div metal:define-macro="navigace">
Navigace
  <ul>
    <li><a href="/">Domů</a></li>
    <li><a href="/ruze">Růže</a></li>
    <li><a href="/pocitace">Počítače</a></li>
    <li><a href="/lokomotivy">Lokomotivy</a></li>
  </ul>
</div>

Jak vidíte, firma Huhlávka a syn má pestrý sortiment. Vytvořme teď webovou stránku „nasefirma“, opět jako šablonu ZPT (Page Template), s následujícím obsahem:

<b metal:use-macro="container/sklad/macros/firma">
  Zde bude obsah makra
</b>

Tady už skutečně využíváme makro „firma“, uložené v souboru sklad. Musíme ho volat pomocí konkrétní cesty „container/sklad/ma­cros/firma“. „container“ znamená „tato složka“ (v Unixu a Windows symbolicky označovaný „.“), „sklad“ je název šablony a „macros“ je speciální klíčové slovo, které znamená, že se má Zope dívat na makra, definovaná v dané šabloně. „firma“ je už název konkrétního makra. Změníte-li definici makra v souboru „sklad“, promítne se změna do všech šablon, které toto makro volají.

Veteráni jazyka DTML (který je v nemilosti, jak jsem psal ve dvou minulých pokračováních) si řeknou, že DTML umí totéž, ale jednoduššeji. Mají  pravdu! Jenže tam, kde schopnosti DTML končí, se metajazyk METAL teprve začíná protahovat. Přesněji řečeno si začíná protahovat své zásuvky.

Zásuvky metajazyka METAL

Myšlenka zásuvek (slots) je prostá: webová stránka je jako skříň, která má množství zásuvek: například navigace, nadpisy, články a hlasování. Měl by tedy existovat přehledný způsob, jak na webové stránce vyjádřit proměnné části. METAL to dělá takto:

<div metal:define-macro="navi">
Navigace
  <ul>
    <li><a href="/">Domů</a></li>
    <li><a href="/ruze">Růže</a></li>
    <li><a href="/pocitace">Počítače</a></li>
    <li><a href="/lokomotivy">Lokomotivy</a></li>
  </ul>
  <span metal:define-slot="akcni_nabidka"></span>
</div>

Výše uvedený zdrojový text prosím uložte do souboru „navigace“. Tento soubor je šablonou pro šablony ZPT, které budou poskytovat navigaci ve složkách /ruze, /pocitace a /lokomotivy. Pro naše skromné účely postačí, když vytvoříte jen složku (Folder) „ruze“ a v ní vytvoříte šablonu ZPT s názvem „index_html“ a s následujícím obsahem:

root_podpora

<html metal:use-macro="container/aq_parent/navigace/macros/navi">
  <b metal:fill-slot="akcni_nabidka">
    Doporučujeme sedm rudých růží za <a href="/akce">speciální cenu!</a>.
  </b>
</html>

Zkuste si tuto šablonu v praxi a uvidíte, jak je standardní navigace převzata z makra „navi“ šablony „navigace“, a přitom je doplněn text speciální nabídky sedmi růží. Pokud jde o nové klíčové slovo „aq_parent“, jistě jste si domysleli, že to znamená nadřízenou složku, což se v Unixu a Windows vyjadřuje jako „..“.


1 – V tomto seriálu není prostor na vysvětlení pojmu sušenka neboli cookie. Pokud nevíte, oč jde, najdete potřebné informace v češtině v mnoha knihách nebo přímo na webu.

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