Hlavní navigace

Šablony stránek pro Zope: nákupní košík

27. 6. 2003
Doba čtení: 3 minuty

Sdílet

Základní kámen e-commerce - Nákupní košík bude dnes představen po prezentační stránce. Z předchozího dílu použijeme nové znalosti o jazyce METAL, které nám programování Košíku zpestří. Košík by se dal sice napsat i bez jazyka METAL, ale takto dostanete dvě lekce za cenu jedné. A to není všechno! Zavolejte ihned a přidáme vám tento supervýkonný mixér MišMaš Turbo a zástěru s včelkou Májou!

Pokud jde o klíčové slovo „aq_parent“, zmíněné na konci předchozího díku našeho seriálu, povšimněte si záhadné předpony „aq“. Z praktického hlediska písmena „aq“ neznamenají vůbec nic. Tato předpona je totiž zástupcem podivných artefaktů, které v Zope najdete. Kdysi, tedy před několika lety, se Zope skládalo z více relativně nezávislých programů a každý z nich měl svůj název. Zope se v té době nejmenovalo Zope, nýbrž bylo bezejmenným souhrnem těchto programů – stavebních prvků. Jeden z nich se jmenoval Aqueduct a od něj pochází písmena „aq“.

Do stejné kategorie patří klíčová slova PrincipiaSear­chSource (správně by stačilo SearchSource) a bobobase_modi­fication_time (stačilo by modification_time). Vývojáři aplikačního serveru Zope bohužel nemají žádnou snahu tyto artefakty odstranit nebo aspoň přidat aliasy na „normální“ verze těchto klíčových slov. Je to zkrátka zbytečné psaní navíc.

Vraťme se k našemu příkladu. Teď už skutečně budeme vytvářet Nákupní košík. Můžete smazat šablony sklad a navigace i složku ruze s obsahem. Nebudeme je už potřebovat. Místo toho prosím vytvořte složku (Folder), jejíž Id bude kosik a jejíž název (Title) bude Košík. Pro náš příklad je důležité, abyste položku Title nenechali prázdnou!

Vytvořte šablonu ZPT. Její Id nastavte na index_html a název bude Hlavní stránka. Obsah by měl být následující.

Tato šablona nám bude sloužit jako celostránková šablona pro šablonu ZPT, kterou vytvoříme ve složce kosik a v níž budeme využívat zásuvku body, definovanou výše.

Nyní se tedy přesuneme do složky kosik. Zde vytvořte novou šablonu, opět s Id index_html, a název může být Nákupní košík. Všimněte si položky Expand macros when editing. Zrušte zaškrtnutí čtverečku tesně vlevo od tohoto nadpisu.

Smažte implicitní obsah šablony a vložte toto:

<html metal:use-macro="container/aq_parent/index_html/macros/page">
</html>

Klepněte na tlačítko Save changes.

Nic zvláštního se nestane. Šablona se prostě uloží.

Šablona s makrem METAL

Ale už za okamžik se začnou dít věci. Nejprve zaškrtněte čvereček Expand macros when editing a znovu klepněte na tlačítko Save changes. Výsledek by vás neměl příliš překvapit. V okně se automaticky vyplní zdrojový kód, který jste před chvílí zadali do šablony index_html v nadřízené složce.

Zkuste teď do šablony přidat nějaký text nebo i značku HTML nebo ZPT a výsledek uložte. Zjistíte, že uložení se nepovede! Kdykoliv klepnete na tlačítko Save changes, vždy se znovu objeví původní obsah, převzatý z nadřazené šablony. A to bez ohledu na místo, kam nový text vložíte. Zatím tedy vše funguje jako obyčejná, hloupá direktiva include v běžných programovacích jazycích. Provedete-li ale jemný zásah do jednoho parametru, bude možné nějaké změny udělat.

Posuňte se na řádek s textem  <div metal:define-slot=„body“> a nahraďte jej tímto textem:

<div metal:fill-slot="body">

Nyní znovu zkuste doplnit nějaký text dovnitř značky <div metal:…></div>. Vida, tentokrát se změna uložila. Vložíte-li ale nový text mimo rámec ohraničený značkou  <div metal:…></div>, takový text se neuloží, dokud budete mít zaškrtnutý čtvereček Expand macros when editing. Dlužno zdůraznit, že zaškrtnutí tohoto čtverečku je normální stav a že jsme zaškrtnutí na chvilku zrušili jen pro zdůraznění dramatického efektu při generování makra METAL.

DT2021 tip

Zamyslete se aspoň na chvilku nad možnostmi, které koncepce maker METAL přináší pro zpřehlednění práce v jazyce ZPT. A pak smažte vše, co je mezi značkami <div metal:…></div> a místo toho mezi tyto značky vložte následující zdrojový text:

A to je hotová aplikace Nákupní košík. Odkazuje se na pět skriptů v jazyce Python: addItems, currentItems, deleteItems, getItem a getTotal. Tyto skripty zajišťují veškerou softwarovou logiku, kdežto prezentaci provádí jen tato dlouhá šablona. Rozebereme si ji v dalších dílech spolu s příslušnými skripty. A nebojte se, žádný ze skriptů už není tak dlouhý jako vlastní šablona.