next up previous contents
Nächste Seite: Strukturierter Text Aufwärts: DTML oder TAL Vorherige Seite: DTML oder TAL   Inhalt


TAL und METAL

Die Template Attribute Language besteht aus wenigen Kommandos, die man in den Attributen normaler HTML/XML-Tags unterbringt. Damit es keine Kollisionen mit bestehenden Attributen gibt, haben die Befehle einen eigenen Namensraum ,,tal``. Sie haben immer die gleiche Syntax: tal:befehlsname="wert". Anhand eines Beispiels werden einige TAL-Befehle beschrieben:

<html>
<head>
    <title tal:content="here/getId">Titel der Seite</title>
</head>
<body>
    <p>Es gibt hier folgende Objekte:</p>
    <ul>
        <li tal:repeat="item here/objectValues">
            <b tal:content="item/getId">Objekt</b>
            (<span tal:replace="item/meta_type">Typ</span>)
        </li>
    </ul>
</body>

Im Beispiel werden drei TAL-Befehle gezeigt. Alle beginnen mit der Namensraumkennzeichnung tal:. Dies ist zur Abgrenzung von gleichlautenden Befehlen anderer XML-Sprachen notwendig.

Weitere TAL-Befehle werden in neueren Fassungen des Zope-Books ([7], [11]) und in ,,Aktive Websites schnell erstellen und einfach pflegen`` [2] beschrieben.

Mit zur Template Attribute Language gehört die Macro Expansion Template Attribute Language METAL. Sie besteht aus wenigen Befehlen, die die Platzhalter-Funktion realisieren.

Es folgt ein kleines Beispiel für die Verwendung von Page Templates: es soll ein zentrales Dokument standard_page für das Basis-Layout einer Seite erstellt werden. Ein zweites Dokument my_content benutzt dieses und trägt nur den konkreten Nutzinhalt in Platzhalter ein, die das erste Dokument bereitstellt. Das Beispiel zeigt die Nutzung von METAL-Befehlen.

Das erste Dokument standard_page sieht wie folgt aus:

<html metal:define-macro="master">
    <head>
        <title>FH-Augsburg</title>
    </head>
    <body bgcolor="white">
        <p><a href="/">Hauptseite</a></p>
        <h1>FH-Augsburg-Nachrichten</h1>
        <span metal:define-slot="pagecontent">
            Hier steht der Inhalt der Seite
        </span>
        <p>&copy; <span metal:define-slot="year">2003</span> FH-Augsburg</p>
    </body>
</html>

In der ersten Zeile wird mit Hilfe von metal:define-macro=master" angegeben, dass dieses Dokument als Vorlage für andere Dokumente dienen kann.

Die Seite besteht aus einem Link, der auf das Wurzel-Verzeichnis des Servers verweist, einer grossen Überschrift und einem Bereich für den Inhalt der Seite. Desweiteren ist eine Jahreszahl für das Copyright angegeben. Die von aussen veränderbaren Bereiche werden mit Hilfe von metal:define-slot=ßlotname" angegeben. Ein anderes Dokument kann diese Slots mit eigenem Inhalt füllen. Wenn sie nicht explizit gefüllt werden, wird der Inhalt des Tags angezeigt.

Das zweite Dokument my_content benutzt das erste, ist aber auch ohne Probleme isoliert davon in einem HTML-Browser zu betrachten:

<html metal:use-macro="here/standard_page/macros/master">
    <head>
        <title>Testseite</title>
    </head>
    <body>
        <span metal:fill-slot="pagecontent">
            <h2>Bericht über die Ereignisse des Jahres 2000 an der
            Fachhochschule</h2>

            <p>1. Januar: Ohne technische Probleme verlief der Wechsel ins
            Jahr 2000.</p>
        
            ...
        </span>
        <br />
        <span metal:fill-slot="year">2001</span>
    </body>
</html>

Mit der Anweisung metal:use-macro wird angegeben, dass ein Makro in einem anderen Dokument als Grundlage für diese Seite dienen soll, wenn sie von einerm Browser in Zope angefordert wird. Zope zeigt dann die Seite des ersten Dokuments an, lediglich an den Stellen, bei denen im zweiten Dokument explizit mit Hilfe von metal:fill-slot=ßlotname" ein anderer Inhalt angegeben ist, wird der Inhalt des zweiten Dokuments eingesetzt.

Als Resultat erhält man eine Seite, die den Link auf die Hauptseite, die grosse Überschrift, eine kleinere Überschrift, die Meldung und den Copyright auf das Jahr 2001 anstatt 2003 enthält.


next up previous contents
Nächste Seite: Strukturierter Text Aufwärts: DTML oder TAL Vorherige Seite: DTML oder TAL   Inhalt
Reinhard Holler 2003-04-12