Hlavní navigace

Šablony stránek pro Zope: závěr

Miloš Průdek

V posledním dílu seriálu se podíváme, jak se z Nákupního košíku odstraňují položky, a zamyslíme se nad budoucností Zope a souvisejících technologií.

Pokud jste párkrát přidali zboží do košíku, možná vás napadlo zkusit nějakou zvrhlost – co třeba zadat do objednávky záporné množství? Objednávka se odečte, což je celkem rozumné. Jenže když zadáte dostatečně velké (nebo malé? jsem zmaten :-) záporné číslo, bude objednáno záporné množství… což je bezva způsob, jak si vylepšít skóre na vaší kreditce… protože majitel webového obchodu vám rázem bude dlužit peníze.

Pěkný příklad známé poučky webového programování „Nikdy nedůvěřuj údajům, které zadal uživatel!“. Řešení tohoto problému nechám na vás. Můžete se rozhodnout lišácky použít na vhodném místě funkci abs(), ať je podvodník potrestán zvýšením objednávky, nebo můžete zobrazit stránku s textem „Vy…vy… vy… vy jeden VY!“.

Mazání položek – podruhé

jedenáctém dílu tohoto seriálu byla řeč o skriptu getItems v situaci s prázdným košíkem. Teď máme v košíku nějaké zboží, a tak se znovu vrátíme na začátek probíráného úseku šablony index_html (tedy hned za značkou <div…>).
Podmínka tal:condition=„cu­rrent_items“ je tentokrát splněná, protože skript currentItems vrací neprázdný seznam. Nebudu urážet vaši inteligenci rozebíráním skriptu currentItems, snad jen vypíchnu, že úvodní řádek session=contex­t.REQUEST.SES­SION je standardní způsob, jak načíst relaci do skriptu a pohodlně s ní pracovat.

session=context.REQUEST.SESSION
quantities=session.get('items', {})
items=[]
for id, quantity in quantities.items():
   item=container.getItem(id)
   item['quantity']=quantity
   items.append(item)
return items

Výsledek skriptu getItems je prezentován v tabulce bezprostřeně pod značkou <form…>. Všimněte si, že položka price byla dodána skriptem getItem, který byl podrobněji popsán ve dvanáctém dílu seriálu. Teď se ke skriptu getItem vrátíme, abychom popsali větev přeskočenou ve dvanáctém dílu:

item=items.get(id)
if item is None:
    return None
item['id']=id
return item

Tento úsek vlastně pouze zplacatí jeden záznam z košatého slovníku slovníků definovaného na začátku skriptu getItems. Vytáhne požadovaný slovník, přidá k němu jeho id jako další výraz slovníku a výsledek vrátí volajícímu programu. Takové transformace jsou v Pythonu velmi časté: slovník do seznamu, seznam do slovníku a jiné akčnější úkoly se stanou po troše praxe frázemi, které sypete z rukávu.1

Skript getTotal volaný na konci tabulky je opět triviální, stejně jako skript deleteItems, který je akcí formuláře.

Tím je popis Nákupního košíku uzavřen.

Konec a šáteček

Pokud jste vydrželi až sem, tak zírám. Délka popisu Nákupního košíku by mohla netrpělivé svádět k myšlence, že jednodušší je stáhnout si nějaký hotový program s názvem „nákupní košík“ a vlepit ho do svých stránek HTML. Samozřejme, je to řešení. Také můžete svůj webový obchod hostovat u komerčního poskytovatele a nemusíte programovat vůbec. Zope je o něčem jiném. Oddělení Public Relation firmy Zope Corp. v minulosti bohužel trošku zavádějícím způsobem tvrdilo, že Zope je hotové řešení, které funguje po vybalení z krabice jako dokonalé webové stránky. Ve skutečnosti je Zope „pouhý“ framework, určený pro vývoj aplikací šitých na míru. Podporuje i rapid prototyping a rapid application development, ale není to konzerva s hotovým řešením. Podobně ani například Zope Content Management Framework (CMF) není a nikdy nebyl hotovým systémem pro řízení obsahu, ale jen nadstavbou pro vytváření takových systémů. Zope je zkrátka stavebnice a bez fantazie a tvořivosti se neobejdete.

Pokud spěcháte, není vše ztraceno: množství bezplatně dostupných tzv. Produktů pro Zope lze použít a okamžitě tak vyřešit nejběžnější úkoly bez programování, pro zájemce o komunitní stránky je tu báječný hotový systém Plone, jehož vzhled lze dokonale uzpůsobit a nemít tedy stejné stránky jako desítky jiných medvídků gumídků :-)

Zope se nadále divoce vyvíjí. Zatímco drtivou většinu programátorské práce na verzi Zope 1.x a Zope 2.x odváděla mateřská firma Zope Corp., koncem tohoto nebo počátkem příštího roku bude vydána verze 3, kde je příspěvek členů komunity mnohem významnější. Bude představeno množství nových technologií a vývoj starých technologií jako DTML a ZClasses bude zastaven. Ale neztratíte kompatibilitu – staré programy bude možné provozovat i v Zope 3.

Protože v několika posledních článcích skoro nikdo neposílal diskusní příspěvky k tomuto seriálu, myslím, že je nejvyšší čas seriál ukončit. Prosím teď mlčící většinu, aby se vyjádřila, zda by stála o další články o Zope a souvisejících věcech 2.  Slíbil jsem Johance, že budou vtipnější.


1

Když vás transformace dat procedurálním stylem znudí, vždy se můžete zabavit výletem do říše funkcionálního programování, řízeného zabudovanými funkcemi map, reduce a filter. Nefundamentalis­tický a maximálně užitečný úvod do zpracování textů najdete v knize Text Processing in Python od Davida Mertze.  Ten odkaz nevede na Amazon.com, kde lze knihu zakoupit za 50 USD, ale na web laskavého pana Mertze, kde si můžete knihu zdarma stáhnout. Na pláž je to ideální čtení!
2 Nebojte se, ne hned teď. Nejdřív můžu něco napsat v říjnu. Napište do diskuse, jaká témata by vás zajímala. Když nebude žádný zájem, nebudou žádné články!

Našli jste v článku chybu?
11. 4. 2005 13:38
karel.kabelka@post.cz (neregistrovaný)
Ahoj zdravím, zajímalo by mě a byl bych velice rád, kdyby mi někdo poradil, nevím jak mám nakonfigurovat workflow v Plone. Děkuji
4. 8. 2003 14:53
Miloš Průdek (neregistrovaný)

Přiznám se, že jsem o Archetypes vůbec neslyšel. Máte nějaký odkaz na informace?