Deutsche Zope User Group
Gast 2 Benutzer online

Die Anweisung tal:attributes ersetzt das Attribut src des img-Tags durch den Wert von item/icon. Das Attribut src="/misc_/OFSP/Folder_icon.gif" in der Vorlage fungiert als Platzhalter.

Achten Sie darauf, dass wir das Attribut tal:content in der Tabelle mit einer tal:replace-Anweisung in einem span-Tag ersetzt haben. Diese Änderung erlaubt Ihnen, sowohl eine Abbildung als auch Text in der Tabellenzelle zu haben.

Ein Dateiarchiv mit Seitenvorlagen erstellen

Hier ist ein Beispiel dafür, wie man Seitenvorlagen mit Zope verwendet, um mit einer Vorlage, etwas Pythoncode und einigen Dateien ein einfaches Dateiarchiv zu erstellen.

Erstellen Sie zuerst einen Entwurf der Dateiarchivseite mit Hilfe Ihres HTML-Editors. Die Beispiele in diesem Kapitel wurden mit Amaya erzeugt. Sie müssen es mit dem Entwurf nicht übertreiben, er zeigt lediglich einige fiktive Angaben. Hier ist ein Entwurf eines Dateiarchivs, die eine Datei enthält:

      
      
      
        Dateiarchiv
        
        
      

      
      

Dateiarchiv

Klicken Sie auf eine der untenstehenden Dateien um sie herunterzuladen.

DZUG-News

Zopebuch: Inhaltsverzeichnis

Kapitel 5: Zope-Seitenvorlagen verwenden

Seitenvorlagen sind ein Werkzeug zum Erzeugen von Webseiten. Sie helfen Programmierern und Designern, beim erstellen dynamischer Webseiten für Zope-Web-Anwendungen zusammenzuarbeiten. Designer können sie verwenden, um Seiten zu pflegen, ohne ihre Werkzeuge aufgeben zu müssen, während sie die ersparte Arbeitszeit nutzen können, um jene Seiten in eine Anwendung einzubetten. In diesem Kapitel lernen Sie die Grundlagen von Seitenvorlagen, einschließlich dem, wie Sie sie in Ihrer Website verwenden können, um einfach dynamische Webseiten zu erstellen. In Kapitel 9, "Seitenvorlagen für Fortgeschrittene", erlernen Sie fortschrittliche Seitenvorlagen-Funktionen.

Das Ziel von Seitenvorlagen ist es, Designern und Programmierern zu ermöglichen, leicht zusammenzuarbeiten. Ein Designer kann einen WYSIWYG-HTML-Editor verwenden, um eine Vorlage zu erstellen, dann kann sie ein Programmierer überarbeiten, um sie zum Teil einer Anwendung zu machen. Falls erforderlich, kann der Designer die Vorlage zurück in seinen Editor laden und weitere Änderungen an ihrer Struktur und Erscheinung vornehmen. Durch Ergreifen vernünftiger Maßnahmen, um die vom Programmierer vorgenommenen Änderungen zu erhalten, zerstört der Designer die Anwendung nicht.

Seitenvorlagen verfolgen dieses Ziel durch das Anwenden von drei Prinzipien:

  1. Gutes Zusammenspiel mit Bearbeitungswerkzeugen.
  2. Was man sieht, ist dem, was man bekommt, sehr ähnlich.
  3. Code aus Vorlagen heraus halten, außer struktureller Logik.

Eine Seitenvorlage ist wie ein Modell der Seiten, die sie generiert. Vor allem ist es eine gültige HTML-Seite.

Zope-Seitenvorlagen gegenüber DTML

Zope hat schon DTML. Warum braucht man eine andere Vorlagensprache? Zuallererst zielt DTML nicht auf HTML-Designer ab. Sobald eine Seite in eine Vorlage umgewandelt worden ist, ist es ungültiges HTML, was es schwierig macht, damit außerhalb der Anwendung zu arbeiten. Zweitens leidet DTML an dem fehlenden Trennung zwischen Darstellung, Logik und Inhalt (Daten). Dies vermindert die Skalierbarkeit von Bemühungen im Bereich Content-Management- und Website-Entwicklung, die diese Systeme verwenden.

DTML kann Dinge, die Seitenvorlagen nicht können, wie das dynamische Erzeugen von E-Mail-Nachrichten (Seitenvorlagen können nur HTML und XML generieren). Also wird DTML nicht aussterben. Jedoch sehen wir, dass Seitenvorlagen fast alle den gesamten Bereich der HTML-/XML-Darstellung in Zope übernimmt.

Wie Seitenvorlagen funktionieren

Seitenvorlagen verwenden die Template Attribute Language (TAL). TAL besteht aus speziellen Tag-Attributen. So ähnlich könnte zum Beispiel ein dynamischer Seitentitel aussehen:

      Seitentitel

Das Attribut tal:content ist eine TAL-Anweisung. Da es einen XML-Namensraum besitzt (der tal:-Teil) werden sich die meisten Bearbeitungswerkzeuge nicht darüber beschweren, dass sie es nicht verstehen und werden es auch nicht entfernen. Die Struktur oder Erscheinung der Vorlage wird nicht verändert, wenn Sie sie in einen WYSIWYG-Editor oder einen Web-Browser laden. Der Name content zeigt an, dass es den Inhalt des title-Tags setzt und der Wert "here/title" ist ein Ausdruck, der den Text liefert, der in das Tag eingefügt wird.

Alle TAL-Anweisungen bestehen aus Tag-Attributen deren Name mit tal: beginnt und alle TAL-Anweisungen besitzen mit ihnen verknüpfte Werte. Der Wert einer TAL-Anweisung befindet sich innerhalb der Anführungszeichen. Siehe Anhang C, "Zope-Page-Templates-Referenz" für weitere Informationen über die TAL.

Für den HTML-Designer, der ein WYSIWYG-Werkzeug verwendet, ist das dynamische Titel Beispiel völlig gültiges HTML und wird im Editor so dargestellt, wie ein Titel aussehen sollte. Mit anderen Worten: Seitenvorlagen arbeiten gut mit Bearbeitungswerkzeugen zusammen.

Dieses Beispiel demonstriert auch das Prinzip "Was man sieht, ist dem, was man bekommt, sehr ähnlich". Wenn Sie die Vorlage in einem Editor betrachten, wirkt der Titel-Text als Platzhalter für den dynamischen Titeltext. Die Vorlage bietet ein Beispiel dafür, wie generierte Dokumente aussehen.

Wenn diese Vorlage in Zope gespeichert und von einem Benutzer betrachtet wird, wandelt Zope den Beispiel-Inhalt in dynamischen Inhalt und ersetzt "Seitentitel" durch das, was auch immer "here/title" liefert. In diesem Fall liefert "here/title" den Titel des Objekts auf das die Vorlage angewendet wird. Diese Ersetzung wird dynamisch durchgeführt, wenn die Vorlage betrachtet wird.

Es gibt Vorlagenanweisungen für das Ersetzen von ganzen Tags, deren Inhalten oder lediglich einiger ihrer Attribute. Sie können ein Tag mehrmals wiederholen oder es ganz weglassen. Sie können Teile mehrerer Vorlagen kombinieren und eine einfache Fehlerbehandlung festlegen. All diese Fähigkeiten werden verwendet, um Dokumentstrukturen zu generieren. Trotz dieser Fähigkeiten können Sie keine Unterroutinen oder Klassen erstellen, komplexe Ablaufsteuerungen durchführen oder auf einfache Weise komplexe Algorithmen ausdrücken. Für diese Aufgaben sollten Sie python-basierte Skripte oder Anwendungskomponenten verwenden.

Die Seitenvorlagensprache ist absichtlich nicht so mächtig und allgemein verwendbar, wie sie sein konnte. Sie ist dazu bestimmt, innerhalb eines Rahmenwerks (wie etwa Zope) verwendet zu werden, bei dem andere Objekte die Geschäftslogik verarbeiten und für Aufgaben verwendet werden, die nicht mit dem Seitenlayout zusammenhängen.

Die Vorlagensprache wäre zum Beispiel nützlich, um eine Rechnungsseite aufzubauen, indem je eine Zeile pro Einzelposten erzeugt wird und Beschreibung, Menge, Preis usw. in den Text jeder Zeile eingefügt wird. Sie würde dazu verwendet werden, um den Rechnungseintrag in einer Datenbank zu erzeugen oder mit einer Einrichtung zur Kreditkartenverarbeitung zu interagieren.

Seitenvorlagen erstellen

Beim Entwerfen von Seiten verwendet man wahrscheinlich FTP oder WebDAV statt dem Zope-Managment-Interface (ZMI) um Seitenvorlagen zu erstellen und zu bearbeiten. Informationen zum Bearbeiten von Seitenvorlagen über das Netz erhalten Sie später in diesem Kapitel, im Abschnitt "FTP und WebDAV verwenden". Für die kleinen Beispiele in diesem Kapitel ist einfacher das ZMI zu benutzen.

Verwenden Sie Ihren Web-Browser, um sich als Manager im Zope-Managment-Interface anzumelden. Suchen Sie sich einen Ordner in dem Sie arbeiten möchten (Der Wurzelordner root ist in Ordnung) und wählen Sie "Page Template" (Seitenvorlage) aus der Produktauswahlliste. Geben Sie "einfache_seite" in das Feld Id des Erstellformulars ein und klicken Sie dann auf die Schaltfläche "Add and Edit" ("Hinzufügen und Bearbeiten").

Sie sollten jetzt die Hauptbearbeitungsseite der neuen Seitenvorlage sehen. Der Titel (Title) ist leer, der Inhaltstyp (Content-Type) ist text/html und im bearbeitungsfeld befindet sich der Standardvorlagentext.

Lassen Sie uns nun eine einfache dynamische Seiten erstellen! Geben Sie den Text "eine einfache Seite" in das Feld Title ein. Ändern Sie den Vorlagetext danach so ab, dass er folgendermaßen aussieht:

      
       
         

Dies ist der Titel.

Drücken Sie jetzt die Schaltfläche Save Changes (Änderungen speichern). Zope sollte eine Mitteilung anzeigen die bestätigt, dass Ihre Änderungen gespeichert wurden.

Falls ein HTML-Kommentar in den Vorlagentext eingefügt wird, der mit <-- Page Template Diagnostics beginnt, überprüfen Sie, ob Sie das Beispiel korrekt abgetippt haben und speichern Sie es erneut. Dieser Kommentar ist eine Fehlermeldung, die einem mitteilt, dass etwas fehlerhaft ist. Sie müssen den Fehlerkommentar nicht löschen. Sobald der Fehler korrigiert wurde verschwindet er.

Klicken Sie auf den Reiter Test. Sie sollten eine Seite sehen, auf der oben "Dies ist eine einfache Seite" steht. Beachten Sie, dass der Text noch nicht formatiert ist. Nichts ist fettgedruckt.

Gehen Sie zurück und klicken Sie auf den Verweis Browse HTML source (HTML-Quelltext betrachten) unter dem Feld Content-Type. Daraufhin wird Ihnen der uninterpretierte Quelltext der Vorlage angezeigt. Sie sollten den Text "Dies ist der Titel" sehen. Gehen Sie wieder zurück, sodass Sie das Beispiel weiter bearbeiten können.

Das Feld Content-Type erlaubt Ihnen den Inhaltstyp Ihrer Seite festzulegen. Normalerweise werden Sie den Inhaltstyp text/html für HTML oder den Typ text/xml für XML verwenden.

Wenn man den Inhaltstyp auf text/html setzt, analysiert Zope Ihre Vorlage im HTML-Kompatibilitätsmodus, der die Verwendung der toleranten HTML-Syntax erlaubt. Wenn man den Inhaltstyp auf etwas anderes als text/html setzt, nimmt Zope an, dass sich bei der Vorlage um wohlgeformtes XML handelt. Zope benötigt auch eine explizite Deklaration der XML-Namensräume TAL und METAL für wohlgeformtes XML.

Die Funktion Expand macros with editing ist in Kapitel 9 "Seitenvorlagen für Fortgeschrittene" beschrieben.

Einfache Ausdrücke

Der Ausdruck "template/title" in Ihrer einfachen Seitenvorlage ist ein Pfadausdruck. Dies ist der gängigste Ausdruckstyp. Es gibt mehrere andere Arten von Ausdrücken die durch den Standard "TAL Expression Syntax" (TALES) definiert werden. Für weitere Informationen über TALES sehen Sie in Anhang C, "Zope Seitenvorlagen verweisen" nach.

Der Pfadausdruck "template/title" holt die Eigenschaft title der Vorlage. Hier sind einige andere gebräuchliche Pfadausdrücke:

  • request/URL: Der URL der gegenwärtigen Web-Anfrage.
  • user/getUserName: Der Login-Name des angemeldeten Benutzers.
  • container/objectIds: Eine Liste von Ids der Objekte die sich in demselben Ordner wie die Vorlage befinden..

Jeder Pfad beginnt mit einem Variablennamen. Wenn die Variable den gewünschten Wert enthält, belassen Sie es hierbei. Ansonsten fügen Sie einen Schrägstrich ('/') hinzu und den Namen eines Unterobjekts oder einer Eigenschaft. Es kann sein, dass Sie sich Ihren Weg durch mehrere Unterobjekte bahnen müssen, um zu dem Wert zu kommen, den Sie suchen.

Zope definiert einen kleinen Satz an eingebauten Variablen wie request und user, die in Kapitel 9, "Seitenvorlagen für Fortgeschrittene" beschrieben werden. In diesem Kapitel erfahren Sie auch, wie Sie Ihre eigenen Variablen definieren können.

Text einfügen

In Ihrer Vorlage "einfache_seite" verwendeten Sie die Anweisung tal:replace in einem bold-Tag. Während Sie sie testeten, ersetzte Zope das ganze Tag durch den Titel der Vorlage. Als Sie den Quelltext überflogen, haben Sie den Vorlagentext fettgedruckt gesehen. Wir verwendeten ein bold-Tag, um den Unterschied hervorzuheben.

Um dynamischen Text in einen anderen Text zu setzen, verwenden Sie normalerweise tal:replace in einem span-Tag anstatt in einem bold-Tag. Fügen Sie Ihrem Beispiel beispielsweise die folgenden Zeilen hinzu:

      
Der URL ist URL.

Das Tag span ist strukturell, nicht visuell, so dass dies aussieht, wie "Der URL ist URL." wenn Sie den Quelltext in einem Editor oder Browser betrachten. Wenn Sie die dargestellte Version betrachten, kann sie in etwa so aussehen:

      
Der URL ist http://localhost:8080/einfache_seite.

Wenn Sie Text in ein Tag einfügen, aber das Tag selbst unbeeinflusst lassen wollen, verwenden Sie die Anweisung tal:content. Um den Titel Ihrer Beispielseite auf die title-Eigenschaft der Vorlage zu setzen, fügen Sie die folgenden Zeilen zwischen das html- und die body-Tag ein:

      
        Der Titel
      

Wenn Sie den Reiter "Test" in einem neuen Browser-Fenster öffnen, wird der Titel des Fensters "eine einfache Seite" sein. Wenn Sie den Quelltext der Seite betrachten, sehen Sie, in etwa so etwas:

      
        
          eine einfache Seite
        
      ...

Zope fügte den Titel Ihrer Vorlage ins title-Tag ein.

Sich wiederholende Strukturen

Lassen Sie uns jetzt Ihrer Seite etwas Kontext in Form einer Liste der Objekte geben, die sich im selben Ordner wie die Vorlage befinden. Sie werden eine Tabelle erstellen, die eine nummerierte Zeile für jedes Objekt und Spalten für die Id, den Metatyp und den Titel besitzt. Fügen Sie dem unteren Teil Ihrer Beispielvorlage diese Zeilen hinzu:

      
Nummer Id Metatyp Titel
Nr. Id Metatyp Titel

Die Anweisung tal:repeat in der Tabellenzeile bedeutet "diese Zeile für jedes Element in der Liste von Objektwerten meines Behälters wiederholen". Die repeat-Anweisung legt die Objekte der Liste nacheinander in die Variable item (diese wird Wiederholungsvariable genannt) und erstellt eine Kopie der Zeile mit dieser Variable. Der Wert von "item/getId" ist in jeder Zeile die Id des Objektes für diese Zeile und ebenso ist es mit "item/meta_type" und "item/title".

Sie können jeden beleiebigen Namen für die Wiederholungsvariable verwenden ("item" ist nur ein Beispiel), solange er mit einem Buchstaben beginnt und nur Buchstaben, Ziffern und Unterstriche ('_') enthält. Die Wiederholungsvariable wird nur im Wiederholungs-Tag definiert. Wenn Sie versuchen, sie über- oder unterhalb des Tags tr zu verwenden, erhalten Sie einen Fehler.

Sie können den Namen der Wiederholungsvariable auch verwenden, um Informationen über die gegenwärtige Wiederholung zu bekommen. Indem Sie ihn nach der standardmäßig festegelegten Variablen repeat in einen Pfad setzen, können Sie auf den Wiederholungszähler von Null beginnend ('index'), von eins beginnend ('number'), von "A" ab ('Letter') und auf mehrere andere Art zugreifen. So ist der Ausdruck repeat/item/number in der ersten Reihe 1, in der zweiten Reihe 2 usw.

Da eine tal:repeat-Schleife auch in eine andere gesetzt werden kann, kann mehr als eine zur selben Zeit aktiv sein. Dies ist der Grund dafür, dass Sie repeat/item/number statt nur repeat/number schreiben müssen. Sie müssen angeben, welche Schleife Sie interessiert, indem Sie den Schleifennamen mit angeben.

Betrachten Sie jetzt die Seite und achten Sie darauf, wie sie all die Objekte im selben Ordner wie die Vorlage auflistet. Versuchen Sie, dem Ordner Objekte hinzuzufügen oder zu löschen, und achten Sie darauf, wie die Seite diese Änderungen wiedergibt.

Bedingte Elemente

Durch das Verwenden von Seitenvorlagen können Sie Ihre Umgebung dynamisch abfragen und selektiv Text je nach bestimmten Bedingungen einfügen. Zum Beispiel könnten Sie spezielle Informationen als Antwort auf einen Cookie anzeigen:

      

Hier ist die von Ihnen gewünschte Zusatzinformation.

Dieser Absatz wird nur in die Ausgabe miteinbezogen, wenn einen Cookie namens verbose gibt. Der Ausdruck 'request/cookies/verbose | nothing' ist nur wahr, wenn es ein Cookie mit dem Namen verbose gesetzt ist. Sie erfahren mehr über diese Art von Ausdruck in Kapitel 9, "Seitenvorlagen für Fortgeschrittene".

Mit Hilfe der Anweisung tal:condition, können Sie allelei Bedingungen überprüfen. Eine tal:condition-Anweisung tut nichts, wenn ihr Ausdruck einen wahren Wert hat, entfernt jedoch das komplette Ausdrucks-Tag, einschließlich dessen Inhalt, wenn der Wert falsch ist. Zope erachtet die Zahl Null, eine leere Zeichenkette, eine leere Liste und die eingebaute Variable nothing als "falsche" Werte. Fast jeder andere Wert ist wahr, einschließlich Zahlen ungleich Null, Zeichenketten mit irgendeinem Inhalt (sogar Leerzeichen!).

Eine andere häufige Anwendung von Bedingungen ist es, eine Folge testen, um zu sehen, ob sie leer ist, bevor Sie über sie iterieren. Zum Beispiel haben Sie im letzten Abschnitt gesehen, wie man eine Tabelle erstellt, indem man über eine Sammlung von Objekten iteriert. Hier sehen Sie, wie man der Seite man eine Überprüfung hinzufügen kann, so dass, wenn die Liste von Objekten leer ist, keine Tabelle gezeichnet wird:

      
Nummer Id Metatyp Titel
Nr. Id Metatyp Titel

Wenn der Ausdruck container/objectValues falsch ist, wird die komplette Tabelle weggelassen.

Attribute ändern

Die meisten, wenn nicht alle, der von Ihrer Vorlage aufgelisteten Objekte haben eine icon-Eigenschaft, die den Pfad zum Symbol für diese Art von Objekt enthält. Um dieses Symbol in der Spalte Metatyp zu zeigen, müssen Sie diesen Pfad ins Attribut src eines img-Tags einfügen. Bearbeiten Sie die Spalte Metatyp in beiden Zeilen so, dass diese folgendermaßen aussehen:

      
Metatyp
Name Typ Größe Zuletzt geändert
Beispiel.tgz application/x-gzip-compressed 22 K 2001/09/17

Melden Sie sich jetzt an Ihrem Zope an und erzeugen Sie einen Ordner namens Dateiarchiv. Erstellen Sie in diesem Ordner eine index_html genannte Seitenvorlage, indem Sie Page Template in der Produktauswahlliste wählen, als Id index_html im Formular angeben und auf Add (Hinzufügen) klicken.

Speichern Sie jetzt mit Ihrem HTML-Editor den obigen HTML-Code in den URL der Seitenvorlage index_html, gefolgt von /source.html, zum Beispiel http://localhost:8080/DateiArchiv/index_html/source.html. Achten Sie darauf, dass der URL zum Speichern der Seite index_html mit source.html endet. Da Seitenvorlagen dynamisch sind, benötigen Sie eine Möglichkeit, den Quelltext der Vorlage zu bearbeiten, der noch nicht durch die Seitenvorlagensprache interpretiert wurde. Das Anhängen von source.html an eine Seitenvorlage, gibt Ihnen diesen Quelltext. Beachten Sie, dass, wenn der Inhaltstyp Ihrer Seite text/xml ist, Sie source.xml statt source.html verwenden müssen.

Nun, da Sie die Vorlage gespeichert haben, können Sie zu Zope zurückgehen und auf index_html klicken und dann auf dessen Reiter Test klicken, um die Vorlage zu betrachten. Sie sieht genauso aus wie der Entwurf, also läuft alles gut.

Lassen Sie uns die oben genannte HTML-Seite etwas aufbohren und ihr ein bisschen dynamische Zauberei beibringen. Zuerst wollen wir, dass der Titel der Vorlage dynamisch ist. In Zope werden Sie bemerken, dass die Seitenvorlage ein Formularfeld namens title hat, das Sie ausfüllen können. Statt statischem HTML, wollen wir, dass Zope den Seitenvorlagentitel dynamisch in die wiedergegebene Fassung der Vorlage einfügt. Hier sehen Sie wie:

      
        ...
        Dateiarchiv
        ...

      
      

Dateiarchiv

...

Gehen Sie jetzt zu Zope und ändern Sie den Titel der Seitenvorlage index_html ändern. Klicken Sie, nach dem Speichern dieser Änderung, auf den Reiter Test. Wie Sie sehen können, hat die Seitenvorlage den Titel des Vorlagenobjekts dynamisch in die Ausgabe der Vorlage eingefügt.

Beachten Sie das neue Tag-Attribut content im XML-Namensraum tal. Dieses Attribut bedeutet "den Inhalt (content) dieses Tags durch die Variable 'template/title' ersetzen." In diesem Fall ist template/title der Titel der Seitenvorlage index_html.

Das nächste Stück Zauberei soll eine dynamische Dateiliste aufbauen, die Ihnen alle Dateiobjekte im Ordner Dateiarchiv zeigt.

Um anfangen zu können, müssen Sie nur eine Zeile Python schreiben. Gehen Sie zum Ordner Dateiarchiv und erstellen Sie ein Script (Python) in diesem Ordner. Geben Sie dem Skript die Id dateien und klicken Sie auf Add and Edit (Hinzufügen und Bearbeiten). Ändern Sie das Skript so ab,, dass es den folgenden Pythoncode enthält:

      ## Script (Python) "dateien"
      ## 
      return container.objectValues('File')

Dies gibt eine Liste von Datei (File)-Objekten im Ordner Dateiarchiv zurück. Bearbeiten Sie Jetzt Ihre Seitenvorlage index_html und fügen Sie Ihrem Entwurf noch einige tal-Attribute hinzu:

      ...
      
        Beispiel.tgz
        application/x-gzip-compressed
        22 K
        2001/09/17
      
      ...

Der interessante Teil daran ist das Attribut tal:repeat im HTML-Tag tr. Dieses Attribut veranlasst die Vorlage dazu, über die Werte zu laufen (zu iterieren), die von "container/dateien" (das Pythonskript das Sie erstellt haben) zurückgegeben wurden, und eine neue Tabellenzeile für jede dieser Dateien zu erstellen. Während jeder Wiederholung wird dem gegenwärtigen Dateiobjekt über das gerade iteriert wird, die Name item zugeteilt.

Die Zellen jeder Zeile haben alle tal:content-Attribute, die die Daten beschreiben, die in jede Zelle kommen sollen. Während jeder Wiederholung der Tabellenzeilenschleife ersetzen die Id, der Inhaltstyp, die Größe und das Änderungsdatum die fiktiven Daten in den Zeilen. Beachten Sie auch, wie der Hypertext-Verweis dynamisch auf die gegenwärtige Datei zeigt, indem mit Hilfe von tal:attributes das Attribut href überschrieben wird.

Diese Daten stammen vom Objekt item, durch das Aufrufen von Zope-API-Methoden darauf, weil wir wissen, dass es ein File-Objekt ist. Die Methoden item/getId, item/content_type, item/getSize, item/bobobase_modification_time sind alle Standard-API-Funktionen, die in Zopes Online-Hilfesystem dokumentiert sind.

Gehen Sie zu Zope und testen sie dieses Skript, indem Sie zuerst einige Dateien in den Ordner Dateiarchiv hochladen. Dies geschieht durch Auswählen von File in der Produktauswahlliste und das Klicken auf die Schaltfläche upload (hochladen) auf der nächsten Seite. Nach dem Hochladen Ihrer Datei können Sie einfach auf Add (hinzufügen) klicken. Wenn Sie keine Id angeben, dann wird der Dateiname der Datei verwendet, die Sie hochladen.

Nach dem Sie einige Dateien hochgeladen haben, gehen Sie zur Seitenvorlage index_html und klicken Sie auf den Reiter Test. Jetzt können Sie sehen, dass die Seitenvorlage ein sehr einfaches Dateiarchiv dargestellt hat, mit nur wenigen Änderungen an HTML-Tag-Attributen.

Es gibt einige kosmetische Probleme an dem Dateiarchiv, so wie es jetzt ist. Die Darstellungen von Größe und Datum sind nicht sehr hübsch und passen nicht zum Format des fiktiven Inhalts. Sie möchten, dass die Größe der Dateien in K oder MB statt Bytes angezeigt wird. Hier ist eine python-basiertes Skript, das Sie dafür verwenden können:

      ## Script (Python) "datei_groesse"
      ##
      """
      Eine Zeichenkette zurueckgeben, die die Groesse einer Datei beschreibt.
      """
      bytes=context.getSize()
      k=bytes/1024.0
      mb=bytes/1048576.0
      if mb > 1:
          return "%.2f MB" % mb
      if k > 1:
          return "%d K" % k
      return "%d Bytes" % bytes

Erstellen Sie dieses Skript mit der Id datei_groesse in Ihrem Ordner Dateiarchiv. Es berechnet die Größe einer Datei in Kilobytes und Megabytes und gibt eine entsprechende Zeichenkette zurück, die die Größe der Datei beschreibt. Jetzt können Sie das Skript statt des Ausdrucks item/getSize verwenden:

      ...
      22 K
      ...

Sie können auch die Datumsformatierungsprobleme mit ein bisschen Python lösen. Erstellen Sie ein Skript mit dem Namen datei_datum in Ihrem Ordner Dateiarchiv:

      ## Script (Python) "datei_datum"
      ##
      """
      Das Aenderungsdatum als Zeichenkette der Form YYYY/MM/DD zurueckgeben
      """
      datum=context.bobobase_modification_time()
      return "%s/%s/%s" % (datum.year(), datum.mm(), datum.day())

Ersetzen Sie jetzt den Ausdruck item/bobobase_modification_time durch einen Verweis auf dieses Skript:

      ...
      2001/09/17
      ...

Herzlichen Glückwunsch, Sie haben erfolgreich einen Entwurf genommen und ihn zu einer dynamischen Seitenvorlage gemacht. Dieses Beispiel verdeutlicht, wie gut Seitenvorlagen als "Darstellungsschicht" in Ihren Anwendungen funktionieren. Die Seitenvorlagen stellen die Anwendungslogik (die python-basierten Skripte) dar und die Anwendungslogik arbeitet mit den Daten in Ihrer Site (den Dateien).

Bearbeiten entfernter Dateien mit FTP und WebDAV

Sie können Seitenvorlagen über das Netz sowohl mit FTP und WebDAV bearbeiten, als auch über das Veröffentlichen per HTTP PUT. Mit Hilfe dieser Methoden können Sie Seitenvorlagen verwenden, ohne fortgeschrittene WYSIWYG-Editoren wie DreamWeaver verlassen zu müssen.

Der vorherige Abschnitt hat Ihnen gezeigt, wie man eine Seite bearbeiten und Amaya über das Netz verwenden kann, das HTTP PUT verwendet, um Seiten hochzuladen. Sie können dasselbe mit FTP und WebDAV mit Hilfe derselben Schritte machen.

  1. Erstellen Sie eine Seitenvorlage im Zope-Management-Interface. Sie können ihr eine beliebige Dateinamenserweiterung geben. Viele Leute bevorzugen .html, während andere .zpt bevorzugen. Beachten Sie, dass einige Namen wie index_html spezielle Bedeutungen zu Zope haben.
  2. Fragen Sie die Datei mit Hilfe des URL Ihrer Seitenvorlage plus /source.html oder /source.xml ab. Dies liefert Ihnen den Quelltext Ihrer Seitenvorlage.
  3. Bearbeiten Sie Ihre Datei mit Ihrem Editor und speichern Sie sie. Wenn Sie sie speichern, sollten Sie denselben Quellen-URL verwenden, den Sie verwendet haben, um sie abzufragen.
  4. Laden Sie Ihre Seite wahlweise neu, nachdem Sie sie bearbeitet haben, um sie auf Fehlerkommentare zu überprüfen. Sehen Sie im nächsten Abschnitt für weitere Details über Fehlerbereinigung nach.

In späteren Versionen von Zope werden Sie wahrscheinlich in der Lage sein, Seitenvorlagen ohne das Zope-Management-Interface erstellen zu können.

Fehler bereinigen und testen

Zope hilft Ihnen Fehler in Ihren Seitenvorlagen aufzuspüren und zu korrigieren. Zope bemerkt Probleme zu zwei verschiedenen Zeitpunkten: wenn Sie eine Seitenvorlage bearbeiten und wenn Sie eine Seitenvorlage betrachten. Wenn Sie bearbeiten fängt Zope andere Arten von Problemen ab, als wenn Sie eine Seitenvorlage betrachten..

Sie sind wahrscheinlich schon mit Fehlerkommentaren vertraut, die Zope in Ihre Seitenvorlagen einfügt, wenn es auf Probleme trifft,. Diese Kommentare zeigen Ihnen Probleme an, die Zope findet, während Sie Ihre Vorlagen bearbeiten. Die Art von Problemen, die Zope findet, wenn Sie bearbeiten, sind hauptsächlich Fehler in Ihren TAL-Anweisungen. Zum Beispiel:

      

Diese Diagnosemeldung teilt Ihnen mit, dass Sie versehentlich tal:contents anstatt tal:content in Zeile 10 Ihrer Vorlage verwendet haben. Andere Diagnosemeldungen beschreiben Ihnen Probleme mit Ihren Vorlagenausdrücken und Makros.

Wenn Sie das Zope-Management-Interface verwenden, um Seitenvorlagen zu bearbeiten, ist es leicht, diese Diagnosemeldungen zu entdecken. Wenn Sie jedoch WebDAV oder FTP verwenden, kann man diese Nachrichten leicht übersehen. Falls Sie zum Beispiel eine Vorlage mit FTP auf Zope sichern, erhalten Sie keinen FTP-Fehler, der Ihnen das Problem beschreibt. Vielmehr müssen Sie die Vorlage von Zope neu laden, um die Diagnosemeldung zu sehen. Wenn man FTP und WebDAV verwendet, ist es gut, Vorlagen neu zu laden, nachdem Sie sie bearbeitet haben, um sich zu vergewissern, dass sie keine Diagnosemeldungen enthalten.

Wenn Sie die Diagnosemeldung nicht bemerken und versuchen, eine Vorlage mit Problemen darzustellen, sehen Sie eine Nachricht wie diese:

      Error Type: RuntimeError
      Error Value: Page Template hallo.html has errors.

Das ist Ihr Signal, die Vorlage neu zu laden und die Diagnosemeldung zu überprüfen.

Zusätzlich zu Diagnosemeldungen beim Bearbeiten bekommen Sie gelegentlich normale Zope-Fehler, wenn Sie eine Seitenvorlage betrachten. Diese Probleme werden normalerweise durch Probleme in Ihren Vorlagenausdrücken verursacht. Zum Beispiel könnten Sie einen Fehler bekommen, wenn ein Ausdruck eine Variable nicht ausfindig machen kann:

      Error Type: Undefined
      Error Value: "einhorn" not found in "here/einhorn"

Diese Fehlermeldung teilt Ihnen mit, dass die Variable einhorn nicht gefunden werden kann, auf die im Ausdruck here/einhorn verwiesen wird. Um Ihnen zu helfen, herauszufinden, was falsch lief, bezieht Zope Angaben über die Umgebung ins Traceback ein. Wenn Sie sich im Debugging-Modus befinden, erhalten Sie diese Angaben unten auf der Fehlerseite. Sehen Sie sich ansonsten den Quelltext der Fehlerseite an, um das Traceback zu sehen. Das Traceback beinhaltet Angaben über die Umgebung:

      ...
      'here': ,
      'modules': ,
      'nothing': None,
      'options': {'args': ()},
      'request': ...
      'root': ,
      'template': ,
      'traverse_subpath': [],
      'user': amos})
      ...

Diese Angaben sind ein wenig kryptisch, aber mit etwas Detektivarbeit können sie Ihnen helfen, zu begreifen, was falsch lief. In diesem Fall sagen sie uns, dass die Variable here eine "Application instance" (Anwendungsinstanz) ist. Dies bedeutet, dass es der Wurzelordner von Zope ist, (beachten Sie, dass die Variable root dieselbe "Application instance" ist). Vielleicht ist das Problem, dass Sie die Vorlage auf einen Ordner anwenden wollten, der eine Eigenschaft namens einhorn besitzt. Das Traceback liefert nicht viel Hilfe, aber es kann Ihnen manchmal weiterhelfen.

XML-Vorlagen

Ein anderes Beispiel für die Flexibilität von Seitenvorlagen ist, dass sie sowohl XML als auch HTML dynamisch wiedergeben können. Zum Beispiel haben Sie in Kapitel 5, "Erstellung einfacher Zope-Anwendungen" den folgenden XML-Code erzeugt:

      
        
          Mein Kommentar
        
        
          Ich mag deine Webseite
        
        
          Bitte keine Blink-Tags
        
      

Dieser XML-Code wurde durch Iterieren über alle DTML-Dokumente in einem Ordner und das Einfügen ihres Quelltexts in kommentar-Elemente geschaffen. In diesem Abschnitt zeigen wir Ihnen, wie man Seitenvorlagen dazu verwendet, um den gleichen XML-Code zu erzeugen.

Erstellen Sie eine neue Seitenvorlage namens "eintraege.xml" in Ihrem Gästebuch-Ordner mit dem folgenden Inhalt:

      
        
          Hierher kommt der Kommentar...
        
      

Vergewissern Sie sich, dass Sie den Inhaltstyp auf text/xml stellen. Klicken Sie auf Save Changes und den Reiter Test. Wenn Sie Netscape verwenden, fordert es Sie dazu auf, ein XML-Dokument herunterzuladen, wenn Sie MSIE 5 oder höher verwenden, können Sie das XML Dokument im Browser betrachten.

Beachten sie wie die Anweisung tal:repeat über alle DTML-Dokumente iteriert. Die Anweisung tal:content fügt den Quelltext jedes Dokuments in das Element kommentar ein. Das Attribut xmlns:tal ist eine XML-Namensraum-Anweisung. Es sagt Zope, dass das Namen die mit tal beginnen, Seitenvorlagenbefehle sind. Siehe Anhang C, "Zope-Page-Templates-Referenz" für weitere Informationen über die XML-Namensräume TAL- und METAL.

XML mit Seitenvorlagen zu erzeugen, ist fast genauso wie das Erzeugen von HTML. Der wichtigste Unterschied ist, dass Sie explizite XML-Namensraum-Deklarationen verwenden müssen. Ein anderer Unterschied ist, dass Sie die Inhaltstyp auf text/xml, oder wie auch immer der Inhaltstyp für Ihr XML sein soll, stellen sollten. Der letzte Unterschied ist, dass Sie sich den Quelltext einer XML-Vorlage durch Gehen zu source.xml statt source.html ansehen können.

Vorlagen mit Inhalt verwenden

Im Allgemeinen unterstützt Zope Inhalts-, Darstellungs- und Logikkomponenten. Seitenvorlagen sind Darstellungskomponenten, und sie können verwendet werden, um Inhaltskomponenten anzuzeigen.

Zope 2.5 wird mit mehreren Inhaltsbestandteilen ausgeliefert: ZSQL-Methoden, Files und Images. DTML-Dokumente und -Methoden sind nicht wirklich reine Inhaltsbestandteile, da sie Inhalt beinhalten und DTML-Code ausführen können. Zur Zeit besitzt Zope standardmäßig kein gutes, universal einsetzbares Inhaltsobjekt. Sie können Files für Textinhalt verwenden, da Sie den Inhalt von Files bearbeiten können, wenn die Datei weniger als 64 K groß ist und Text enthält. Jedoch ist das File-Objekt ziemlich spartanisch.

Zopes Content Management Framework (CMF) löst dieses Problem, indem es ein Sortiment von vielfältigen Inhaltskomponenten bietet. Das CMF ist Zopes Content-Management-Erweiterung. Es führt viele Arten von Verbesserungen ein, einschließlich Workflow, Skins und Inhaltsobjekte ein. Das CMF verwendet Seitenvorlagen ausgiebig. Eine spätere Version von Zope wird das CMF wahrscheinlich mit beinhalten.

Zusammenfassung

Zope-Seitenvorlagen helfen Ihnen, Webseiten für Ihre Web-Anwendungen zu erstellen. Vorlagen erleichtern Ihnen, normale HTML-Werkzeuge und -Techniken zu verwenden, um Webseiten zu erstellen. Sie bieten auch bequeme Anpassungsmöglichkeiten, die es Ihnen erlauben, sie in Ihre Anwendungen einzubinden. Seitenvorlagen helfen Gestaltern und Programmierern, zusammen zu arbeiten, um Web-Anwendungen zu produzieren. In Kapitel 9, "Seitenvorlagen für Fortgeschrittene" werden Sie etwas über mächtige Techniken für Vorlagen lernen, wie Python-Ausdrücke und Makros.