Direkt zum Inhalt | Direkt zur Navigation

Benutzerspezifische Werkzeuge
Anmelden
Sektionen
Sie sind hier: Startseite Erscheinungsbild Zope Page Templates (ZPT)

Zope Page Templates (ZPT)

Zope Page Templates verwenden TAL (Template Attribute Language), z.B.:

<title tal:content="context/title">Page Title</title>

Dabei ist tal:content das TAL-Attribut wobei tal den XML-Namensraum angibt und content darauf hinweist, dass der Inhalt des title-Tags gesetzt werden soll. Der Wert context/title schließlich ist ein Ausdruck, der den in den Tag einzufügenden Text liefert und dabei Page Title ersetzt.

Ausdrücke

Der Text context/title ist ein einfacher Pfadausdruck der TAL Expression Syntax (TALES), der die Titel-Eigenschaft des Kontexts aufruft. Andere häufig verwendete Pfadausdrücke sind:

request/URL
Die URL des aktuellen Web-Requests.
user/getUserName
Der Login-Name des aktuell angemeldeten Nutzers.
container/objectIds
Eine Liste aller IDs von Objekten im selben Ordner wie das Template.

Jeder Pfadausdruck startet mit einem Variablenname und kann, gerennt durch einen Schrägstrich (/), um den Namen eines Unterobjekts oder eine Eigenschaft spezifiziert werden.

Die Menge der verfügbaren Variablen, wie request oder user, ist relativ gering und wird später noch vollständig beschrieben werden. Zudem werde ich zeigen, wie eigene Variablen definiert werden können.

Inhalte

Angenommen unser Template hätte die ID my_page, und wir wollten Text dynamisch einfügen, so könnten wir dies innerhalb eines span-Tags machen:

Die URL ist <span tal:replace="request/URL">URL</span>.

Beachten Sie, dass der gesamte Tag ersetzt wird durch das Ergebnis der TAL-Anweisung, also:

Die URL ist http://localhost:8080/mysite/my_page.

Soll ein Tag erhalten bleiben, wird tal:content verwendet:

<title tal:content="template/title">The Title</title>

Aufzählungen

Soll eine ganze Liste von Werten automatisch eingefügt werden, so kann dies mit tal:repeat erfolgen, z.B.:

<table>
    <tr>
        <th>#</th><th>Id</th><th>Meta-Type</th><th>Title</th>
    </tr>
    <tr tal:repeat="item container/objectValues">
        <td tal:content="repeat/item/number">#</td>
        <td tal:content="item/id">Id</td>
        <td tal:content="item/meta_type">Meta-Type</td>
        <td tal:content="item/title">Title</td>
    </tr>
</table>

Der tal:repeat-Ausdruck auf einer Tabellenzeile bedeutet, dass diese Zeile für jeden Artikel in diese Container erstellt wird. Dabei wird für jede Zeile ein Artikel der Liste als item-Variable verwendet und dessen Werte ausgelesen, wobei statt item auch jeder andere Name verwendet werden kann.

repeat/item/number ist die fortlaufende Nummerierung der Artikel innerhalb der Aufzählung. Soll die Nummerierung mit 0 beginnen, muss statt number index verwendet werden, soll die fortlaufende Nummerierung alphabetisch sein, ist das Attribut letter.

Selbstverständlich können auch mehrere Aufzählungen ineinander verschachtelt werden.

Bedingungen

Um jeder zweiten Zeile der obigen Tabelle eine andere Hintergrundfarbe zu geben, können entsprechende Bedingungen angegeben werden:

<table>
    <tr>
        <th>#</th><th>Id</th><th>Meta-Type</th><th>Title</th>
    </tr>
    <tbody tal:repeat="item container/objectValues">
        <tr bgcolor="#DDE0E8" tal:condition="repeat/item/even">
            <td tal:content="repeat/item/number">#</td>
            <td tal:content="item/id">Id</td>
            <td tal:content="item/meta_type">Meta-Type</td>
            <td tal:content="item/title">Title</td>
        </tr>
        <tr tal:condition="repeat/item/odd">
            <td tal:content="repeat/item/number">#</td>
            <td tal:content="item/id">Id</td>
            <td tal:content="item/meta_type">Meta-Type</td>
            <td tal:content="item/title">Title</td>
        </tr>
    </tbody>
</table>

The tal:repeat has not changed, you have just moved it onto the new tbody tag. This is a standard HTML tag meant to group together the body rows of a table, which is how you are using it. There are two rows in the body, with identical columns, and one has a grey background.

View the template's source, and you see both rows. If you had not added the tal:condition statements to the rows, then the template would generate both rows for every item, which is not what you want. The tal:condition statement on the first row ensures that it is only included on even-indexed repetitions, while the second row's condition only lets it appear in odd-indexed repetitions.

A tal:condition statement does nothing if its expression has a true value, but removes the entire statement tag, including its contents, if the value is false. The odd and even properties of repeat/item are either zero or one. The number zero, a blank string, an empty list, and the builtin variable nothing are all false values. Nearly every other value is true, including non-zero numbers, and strings with anything in them (even spaces!).

Artikelaktionen