![]() ![]() |
Sie sind hier: ZWikiSeiten > ZBZPT Zopebuch: Inhaltsverzeichnis Kapitel 5: Zope-Seitenvorlagen verwendenSeitenvorlagen 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:
Eine Seitenvorlage ist wie ein Modell der Seiten, die sie generiert. Vor allem ist es eine gültige HTML-Seite. Zope-Seitenvorlagen gegenüber DTMLZope 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 funktionierenSeitenvorlagen verwenden die Template Attribute Language (TAL). TAL besteht aus speziellen Tag-Attributen. So ähnlich könnte zum Beispiel ein dynamischer Seitentitel aussehen:
Das Attribut Alle TAL-Anweisungen bestehen aus Tag-Attributen deren Name mit 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 erstellenBeim 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 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:
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 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 Wenn man den Inhaltstyp auf Die Funktion Expand macros with editing ist in Kapitel 9 "Seitenvorlagen für Fortgeschrittene" beschrieben. Einfache AusdrückeDer 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
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 Text einfügenIn Ihrer Vorlage "einfache_seite" verwendeten Sie die Anweisung Um dynamischen Text in einen anderen Text zu setzen, verwenden Sie normalerweise
Das Tag
Wenn Sie Text in ein Tag einfügen, aber das Tag selbst unbeeinflusst lassen wollen, verwenden Sie die Anweisung
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:
Zope fügte den Titel Ihrer Vorlage ins Sich wiederholende StrukturenLassen 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:
Die Anweisung 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 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 Da eine 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 ElementeDurch 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:
Dieser Absatz wird nur in die Ausgabe miteinbezogen, wenn einen Cookie namens Mit Hilfe der Anweisung 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:
Wenn der Ausdruck Attribute ändernDie meisten, wenn nicht alle, der von Ihrer Vorlage aufgelisteten Objekte haben eine
Die Anweisung Achten Sie darauf, dass wir das Attribut Ein Dateiarchiv mit Seitenvorlagen erstellenHier 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:
Melden Sie sich jetzt an Ihrem Zope an und erzeugen Sie einen Ordner namens Speichern Sie jetzt mit Ihrem HTML-Editor den obigen HTML-Code in den URL der Seitenvorlage Nun, da Sie die Vorlage gespeichert haben, können Sie zu Zope zurückgehen und auf 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: ... Gehen Sie jetzt zu Zope und ändern Sie den Titel der Seitenvorlage Beachten Sie das neue Tag-Attribut Das nächste Stück Zauberei soll eine dynamische Dateiliste aufbauen, die Ihnen alle Dateiobjekte im Ordner Um anfangen zu können, müssen Sie nur eine Zeile Python schreiben. Gehen Sie zum Ordner ## 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 ... Der interessante Teil daran ist das Attribut Die Zellen jeder Zeile haben alle Diese Daten stammen vom Objekt Gehen Sie zu Zope und testen sie dieses Skript, indem Sie zuerst einige Dateien in den Ordner Nach dem Sie einige Dateien hochgeladen haben, gehen Sie zur Seitenvorlage 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 ... Sie können auch die Datumsformatierungsprobleme mit ein bisschen Python lösen. Erstellen Sie ein Skript mit dem Namen ## 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 ... 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 WebDAVSie 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.
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 testenZope 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 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 ... 'here': 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 XML-VorlagenEin 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:
Dieser XML-Code wurde durch Iterieren über alle DTML-Dokumente in einem Ordner und das Einfügen ihres Quelltexts in Erstellen Sie eine neue Seitenvorlage namens "eintraege.xml" in Ihrem Gästebuch-Ordner mit dem folgenden Inhalt:
Vergewissern Sie sich, dass Sie den Inhaltstyp auf Beachten sie wie die Anweisung 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 Vorlagen mit Inhalt verwendenIm 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. ZusammenfassungZope-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. |