Hlavní navigace

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

Miloš Průdek

Nákupní košík v tomto dílu dostává reálnou podobu. Kupodivu představíme vysypávání košíku ještě před jeho plněním a naťukneme i podmíněné vykonávání zdrojového kódu šablon ZPT.

minulém dílu seriálu jste ve složce  kosik vytvořili šablonu s Id index_html, a s názvem Nákupní košík. Dnes si vysvětlíme, jak tato šablona dosahuje prezentace dat a jaké úkoly plní jednotlivé skripty v Pythonu. Budeme se zabývat jen obsahem uzavřeným do značek<div metal:fill-slot=„body“></div>, protože zbytek je triviální a byl vysvětlen v minulých pokračováních tohoto seriálu.

Naše šablona je plně soběstačná; během práce se šablonou neopustíte URL http://…kosik/in­dex_html. Šablona tedy musí zajistit zobrazení aktuálního stavu košíku a dva formuláře: jeden pro přidání nových položek do košíku a druhý pro mazání položek (vysypání vybraných položek z košíku). Akce u obou formulářů jsou skripty v Pythonu. Tyto skripty po dokončení své práce volají původní URL http://…kosik/in­dex_html.

Aby se vám dobře pracovalo při studiu tohoto příkladu, bude nejvýhodnější,  když si otevřete ve vašem webovém prohlížeči dvě okna. Jedno okno bude obsahovat zdrojový text a získáte je klepnutím na záložku Edit; URL tohoto okna bude http://…kosik/in­dex_html/pt_e­ditForm. Druhé okno je zkušební provoz naší šablony a získáte je klepnutím na záložku Test; URL tohoto okna bude http://…kosik/in­dex_html. Používáte-li jako svůj prohlížeč Mozillu, Netscape nebo nejnovější Konqueror s podporou lišt (tzv. tab browsing), můžete mít oba pohledy v jednom okně a k přepínání mezi nimi používat lišty. S Operou nemám zkušenosti, ale asi to jde také.

Pozor! Aby zkušební provoz vůbec fungoval, budete muset do složky kosik uložit zdrojový kód pěti skriptů v Pythonu: addItems, currentItems, deleteItems, getItem a getTotal. Tyto skripty najdete v čerstvé instalaciZope 2.6.1 ve složce /Examples/Shop­pingCart.

Mazání položek – poprvé

Na začátku našeho úseku šablony index_html (tedy hned za značkou <div…>)  je dlouhý logický řádek

<form action="deleteItems"... >

který je z důvodu čitelnosti rozdělen na čtyři fyzické řádky. Tento řádek uvozuje mazání položek z košíku. Protože je náš košík momentálně prázdný, neměl by se tento formulář vůbec zobrazovat. Zákaz zobrazení tohoto formuláře zajišťuje podmínka na konci značky <form…>, tedy konkrétně tal:condition=„cu­rrent_items“. Když má proměnnácurren­t_items hodnotu nepravda, tak Zope přeskočí značku <form>. A také přeskočí všechno ostatní, co je uvnitř značky <form>.

To znamená, že se přeskočí veškerý zdrojový text až po uzavírací značku </form> včetně. Tím je zajištěno, že se formulář vůbec nezobrazí, když je položka current_items nepravdivá. A za nepravdivou bude považována, bude-li její hodnotou None, číslo nula,prázdný řetězec nebo prázdná sekvence, a také kdyby položka vůbec nebyla definována. 1 V našem konkrétním příkladu je obsahem položky current_items prázdný seznam jazyka Python, jinými slovy prázdná sekvence.

Když požádáte váš prohlížeč, aby vám zobrazil zdrojový kód HTML pro zkušební provoz šablony (na adrese http://…kosik/in­dex_html), měli byste vidět následující výsledný kód HTML, jak jej generuje naše šablona ZPT (pro přehlednost jsem vynechal prázdné řádky):

   <h1>Košík</h1>
   <h2>Váš košík</h2>
   <p><b>Košík je prázdný.</b></p>

Položka current_items nespadla z nebe. Dodal ji příkaz tal:define=… s klíčovým slovem global. Podrobněji se k této položce vrátíme níže v kapitole Mazání položek – podruhé, až bude v našem košíku nějaké zboží.

Můžeme tedy pro tuto chvíli přeskočit více než 20 řádků zdrojového textu šablony ZPT a krátkým nahlédnutím na značku <p tal:condition=„not:cu­rrent_items“> se přesvědčit, jak je postaráno o zobrazení podmíněné informace „Košík je prázdný.“

Rozlučte se s tal:condition, protože ve zbytku zdrojového textu se už z touto konstrukcí nesetkáte. Zbytek šablony umožňuje přidávání položek do košíku. A to je akce, která se musí zobrazovat ve všech situacích – čím víc zákazník koupí, tím víc vyděláme :-)

Zdrojový text na tomto místě obsahuje něco málo statického kódu HTML, který zobrazí nadpis,  definuje novou tabulku a zobrazí její nadpisy. Nás zajímá jen dynamická část, a ta začíná až první značkou jazyka ZPT, tal:repeat=„item here/getItem“, která je vložena v první značce <tr> za hlavičkou tabulky. Zde se přidávají nové položky do košíku a o tom bude další díl tohoto seriálu.


1 To mimochodem znamená, že jazyk ZPT si nedělá takové starosti s typem proměnné jako například Pascal. Zda je to dobře, nebo špatně, není relevatní; důležité je uvědomit si, že to tak je, a nenechat se zaskočit hodnotou nepravda, když proměnnou zapomete definovat. Vzpomínáte na BASIC okolo roku 1985?

Našli jste v článku chybu?
4. 7. 2003 17:48
Miloš Průdek (neregistrovaný)

Když se k Vašemu názoru připojí další čtenáři, zrychlím výklad.

4. 7. 2003 12:32
dave (neregistrovaný)

ZOPE jsem si velmi oblíbil nicmene tento serial je opravdu velice rozvlacny. Za clanku na tema ZOPE jsem vdecny, nicmene by to mohlo byt trochu hutnejsi.