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.


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

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

120na80.cz: 5 nejčastějších mýtů o kondomech

5 nejčastějších mýtů o kondomech

Podnikatel.cz: Změny v cestovních náhradách 2017

Změny v cestovních náhradách 2017

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

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

Taky věříte na pravidlo 5 sekund?

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

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

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

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: Udávání kvůli EET začalo

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

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

mBank cenzuruje, zrušila mFórum

Měšec.cz: Jak levně odeslat balík přímo z domu?

Jak levně odeslat balík přímo z domu?

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

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

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

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

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

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání