Šablony stránek pro Zope: získávání

9. 5. 2003
Doba čtení: 4 minuty

Sdílet

Získávání je unikátní technologií Zope, kterou jinde nenajdete. Tato velmi praktická vlastnost umožňuje úsporné a logické programování a tvorbu šablon. Bohužel je následkem její revolučnosti nesnadné ji pochopit jen z definice, a proto v tomto pokračování najdete velmi jednoduchý příklad praktického použití.

Získávání: dědičnost pro URL

Objektové programovací jazyky používají dědičnost pro zjednodušení zdrojového kódu. Zope používá velmi koncepci, která se nazývá získávání (acquisition). Zope totiž hledá šablony a jiné objekty nejen ve složce, na kterou ukazuje aktuální URL, ale postupně ve všech podřízených složkách.

Zkusme to na praktickém příkladu. Do složky /test vložte následující šablonu a nazvěte ji třeba zisk:

<body bgcolor="white" tal:attributes="bgcolor here/barva">

<p>Barva podkladu závisí na složce</p>
</body>

Šablona zisk používá příkaz tal:attributes pro nastavení barvy podkladu stránky. Spoléhá se přitom na existenci další šablony (nebo DTML dokumentu, jak záhy uvidíte) s názvem barva.

Nyní ve složce /test vytvořte šablonu barva. Jejím obsahem bude jeden řádek s jedním slovem: white. Ve složce /test/t1/t11 vytvořte další šablonu, opět s názvem barva. Tentokrát v ní ale bude slovo cyan.

Zkuste nyní do prohlížeče zadat následující adresy (předpokládám, že vaše Zope běží na adrese http://localhos­t:8080/)

http://localhos­t:8080/test/zisk
http://localhos­t:8080/test/t1/zisk
http://localhos­t:8080/test/t2/zisk
http://localhos­t:8080/test/t1/t11/zisk

Jak vidíte, jen na adrese /test/t1/11/zisk se projevil modrozelený podklad. Šablona zisk je jenom ve složce /test, ale díky technologii získávání je vidět i ze všech podřízených složek. Když Zope zobrazuje šablonu zisk, snaží se najít šablonu barva a při hledání postupuje směrem nahoru. Výsledek tohoto hledání závisí na tom, ve které jsme složce.

  • Například když jsme ve složce /test/t2, hledá Zope šablonu barva nejprve v aktuální složce. Protože tam není, hledá dále ve složce /test. Tam nachází šablonu nazvanou barva a úspěšně zobrazí bílou stránku.
  • Když je aktuální složka /test/t1/t11, Zope se dívá nejprve do této aktuální složky. Okamžítě nachází zdejší šablonu barva a zobrazí tedy modrozelenou stránku

Tato technologie získávání se nemusí uplatnit jen na příkaz tal:attributes, ale i na libovolný jiný příkaz ZPT. Nahrazovat lze i velké úseky HTML, nejen jednotlivý atribut. Technologie získávání není určena jen pro jazyk ZPT. Funguje i pro ostatní technologie Zope, o kterých jsem se zatím nezmínil, jako např. DTML a Python Script.

To v praxi znamená, že položka barva nemusela být nutně typu šablona. V tomto konkrétním případě by se dala použít i položka DTML Document se stejným výsledkem a s menší zátěží pro procesor počítače. Zatím se netrapte otázkou, co přesně je DTML Document, a pohlížejte na něj jako na normální dokument HTML.

Nyní už tedy víte, proč jsme nazvali šablonu v předchozí kapitole právě index_html, proč je tato šablona viditelná ze všech podřízených složek a jaké další využití má technologie získávání, která to umožňuje.

Automatický seznam obrázků

Po intermezzu s technologií získávání, která je pro Zope charakteristická a unikátní, se můžeme vrátit k příkladu index_html z kapitoly Automatická navigace. Nejprve zkusíme původní zdrojový kód obohatit dvěma řádky z předchozí kapitoly. Zcela nahoru do zdrojového textu vložte:

<body bgcolor="white" tal:attributes="bgcolor here/barva">

Aby vznikl platný kód HTML, musíme jako poslední řádek vložit:

</body>

Nyní i šablona index_html zobrazí modrozelený podklad. Přesvědčte se o tom otevřením adresy http://localhos­t:8080/test/t1/t11/zisk ve vašem prohlížeči.

bitcoin školení listopad 24

Automatická tvorba navigace není špatná, ale často je třeba zobrazit i různé položky ve složkách; obrázky, dokumenty, zvuky a podobně. Zkusme se teď podívat, jak by vypadala šablona, která by zobrazila všechny obrázky v aktuální složce. Na konec šablony index_html (tj. před závěrečnou značku <body>) doplňte následující zdrojový kód:

<hr>
<div tal:define="obrazky python:here.objectValues('Image')">
 <h2>Obrázky, metoda A</h2>
 <ul tal:condition="obrazky">
   <li tal:repeat="obr obrazky">
     <img src="Obrázek" tal:attributes="src obr/getId">
   </li>
 </ul>
 <p tal:condition="not:obrazky"><i>Zde nejsou žádné obrázky.</i></p>
</div>

První řádek (značku pro vodorovnou linku samozřejmě nepočítám) se příliš neliší od prvního řádku šablony index_html z kapitoly Automatická navigace. Parametr ‚Image‘ zajistí, že here.objectValues() bude obsahovat seznam obrázků. Opravdu nový je pátý řádek, který používá příkaz tal:attributes pro nastavení atributu SRC značky <IMG>. Volání getId je funkce Zope API, která vrací identifikátor daného objektu.