Hlavní navigace

Šablony stránek pro Zope: metajazyk METAL

Miloš Průdek

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:

<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.

Našli jste v článku chybu?

20. 6. 2003 16:07

Milos Prudek (neregistrovaný)

Pochopil jste to správně. Popis nákupního košíku jako takového bude v dalším díle. V tomto díle jsem si připravil půdu, kterou budu v dalším díle potřebovat.

20. 6. 2003 11:54

ploski (neregistrovaný)

cely clanek jsem si precetl asi trikrat, ale stale jsem z nej nepochopil, jak se tedy v ZOPE session data udrzuji .. na zacatku je sice hezky popsan nakupni kosik, nicmene priklady jsou pouze o includovani kousku stranky do stranek jinych. Nebo jsem to spatne pochopil a uvnitr techto examplu je nejaky skryty vyznam sessions|cookies|nakupniho kosiku???

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Vitalia.cz: 7 druhů hotových těst na vánoční cukroví

7 druhů hotových těst na vánoční cukroví

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

Vitalia.cz: Jedlé kaštany jsou trpké, je třeba je tepelně upravit

Jedlé kaštany jsou trpké, je třeba je tepelně upravit

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie