Hlavní navigace

Šablony stránek pro Zope: tal:replace

16. 5. 2003
Doba čtení: 3 minuty

Sdílet

V minulém dílu představenou šablonu pro automatický seznam obrázků dnes trochu přepíšeme, aby poskytovala lepší výsledky, a přitom si v praxi ukážeme další značku jazyka ZPT - tal:replace. Také se znovu podíváme na získávání užitečných informací pro aplikace typu cesta.

V minulém pokračování jsme si představili šablonu obsahující automatický seznam obrázků. Pro přehlednost bude nejlepší, když starý zdrojový kód ze šablony index_html smažete a do šablony dáte jen aktuální příklad jako na obrázku níže.



Když tuto šablonu vyzkoušíte, zjistíte, že funguje dobře a zobrazí seznam obrázků v dané složce. Má to ale dva nedostatky:

  1. Takto sestavená značka <img src> neobsahuje atributy height, width, alt a title. Přitom Zope tyto atributy eviduje pro každý obrázek a umí je vložit do značky <img src>, jen se na to musí jinak.
  2. Když použijete adresu http://localhos­t/test/, obrázky se objeví, ale pokud poslední lomítko vynecháte, obrázky se neobjeví.

Použijeme tedy systémovější řešení. Smažte původní obsah šablony index_html a zadejte následující text:

<hr>
<div tal:define="obrazky python:here.objectValues('Image')">
    <h2>Obrázky, metoda B</h2>

    <ul tal:condition="obrazky">
      <li tal:repeat="obr obrazky">
        <img src="Obrázek" tal:replace="structure obr">

      </li>
    </ul>
    <p tal:condition="not:obrazky"><b>Zde nejsou
    žádné obrázky.</b></p>

</div>

Když jako testovací obrázky použijete například ikony 32×32 ze sady Noia Warm 0.95 pro KDE, vydá tato šablona po spuštění následující výsledek:



Kromě nadpisu ve značce <h2> se změnil vlastně jen řádek se značkou <img src>. Zatímco dříve zde byla značka tal:attributes a modifikovali jsme jen atributy značky <img src>, teď je situace odlišná. Používáme příkaz tal:replace, který původní značku <img src> celou smaže a nahradí ji výrazem structure obr. Argumentem je objekt

obr, který obsahuje celý obrázek.

Všimněte si klíčového slova structure. Toto slovo je nezbytné, protože jinak by Zope automaticky citovalo vložený kód HTML; v prohlížeči by se pak místo obrázku objevila samotná kompletní značka <img src>. Zkuste na chvilku odstranit klíčové slovo structure a uvidíte, že nekecám :-).

Role klíčového slova structure je následující: Zope automaticky cituje všechny značky HTML, vkládané pomocí příkazů tal:replace a tal:content. Toto automatické citování je naprosto klíčová vlastnost. Zabraňuje totiž tomu, aby data vkládaná programově pomocí šablon rozrušila strukturu stránky definovanou v dané šabloně. Tím se právě potvrzuje a zachovává základní smysl šablon: transparentní možnost úprav pro webdesignera bez ohledu na to, co dělá programátor. Když programátor explicitně vloží klíčové slovostructure, je to pro něj signál, že přebírá odpovědnost za případné rozhození layoutu.

Typ cesta: další příklady

Jako první typ syntaxe TALES jsme v minulých dílech tohoto seriálu článků použili typ cesta (path), a to konkrétně cestu template/title. Také jsme viděli, že se můžeme podívat do objektů aktuální složky díky cestě here/…, a konkrétně jsme se dívali na objekt here/barva, přičemž barva byl dokument DTML ve složce /test/t1/t11.

Když se budeme vyjadřovat lidským, normálním jazykem, řekli bychom, že barva je vlastnost dané složky. Proč tedy vkládat nějaký DTML dokument, který stejně obsahuje jen jeden řetězec? Šlo by to udělat logičtějším způsobem, bez vkládání dalších dokumentů? Zope je dosti objektově orientované a každý objekt má záložku Properties, která obsahuje různé vlastnosti objektu. Přesvědčte se sami, že kupříkladu obrázky obsahují vlastnosti title, height, width a content_type. A každá složka má ve své záložce Properties vlastnost title.

Nemusíte se přitom omezovat na zabudované vlastnosti. Můžete přidávat další, uživatelské vlastnosti. Ukažme si, jak využít vlastnosti na skutečném příkladu.

Zkuste smazat DTML dokument barva ze složky /test/t1/t11. Pak klepněte na záložku Properties této složky a vložte novou vlastnost, jejíž název (Name) bude barva a hodnota například magenta. Když zobrazíte adresu http://localhos­t:8080/test/t1/t11/, bude pozadí stránky fialové.

Přitom šablona index_html nebyla změněna!

CS24_early

Zope totiž metodu získávání aplikuje postupně: nejprve se dívá do vlastností objektů (jako je složka, obrázek nebo dokument) a až potom nahlíží do vložených objektů. Technologii získávání jsem popsal v minulém pokračování. Budeme ji používat docela často, protože je to užitečná technologie.

Typ cesta je zkrátka snadný a příjemný způsob, jak přijít k penězům… totiž chci říct k informacím. V dalším pokračování našeho seriálu si představíme některé možnosti typu cesta v reálné situaci.

Byl pro vás článek přínosný?