Deutsche Zope User Group
Gast 2 Benutzer online
DZUG-News

Zopebuch: Inhaltsverzeichnis

Kapitel 3: Verwendung grundlegendender Zope-Objekte

Wenn Sie eine Webanwendung mit Zope aufbauen, erstellen Sie die Anwendung aus Objekten. Je nach Design sind unterschiedliche Objekte für unterschiedliche Teile Ihrer Anwendung zuständig. Einige Objekte speichern Ihre Inhaltsdaten, wie Dokumente von Textverarbeitungsprogrammen, Arbeitsblätter (Spread-Sheets) und/oder Bilder. Einige Objekte steuern, wie dynamische Web-Inhalte erzeugt werden, indem sie Eingaben aus einem Web-Formular akzeptieren oder E-Mails senden. Einige Objekte kontrollieren, wie Ihre Inhalte angezeigt oder Ihrem Betrachter präsentiert werden, zum Beispiel als Web-Seite oder per E-Mail. Im Allgemeinen übernehmen Zope-Objekte drei Arten von Aufgabenbereichen:

Inhalt
Zope-Objekte wie Dokumente, Bilder und Dateien beinhalten verschiedene Arten von Text- und binären Daten. Zusätzlich zu Objekten in Zope, die Inhalt enthalten, kann Zope mit extern gespeicherten Inhalten, zum Beispiel in einer relationalen Datenbank, arbeiten.
Logik
Zope hat Funktionen für das Schreiben von Geschäftslogik. Zope erlaubt Ihnen, Verhalten mit Hilfe von Python, Perl und SQL zu schreiben. "Geschäftslogik" ist jede Art der Programmierung, die keine Darstellung einschließt, sondern es erfordert Aufgaben auszuführen, wie das Ändern von Objekten, das Senden von Nachrichten, das Prüfen von Bedingungen und das Antworten auf Ereignisse.
Darstellung
Sie können das Look-And-Feel Ihrer Site mit Zope-Objekten steuern, die als Web-Vorlagen arbeiten. Zope besitzt eine Tag-basierte Programmiersprache namens Document Template Markup Language (DTML) um die Darstellung zu steuern.

Das Wort Objekt ist ein schwer beladener Ausdruck. Je nach Ihrem Wissenshintergrund kann es eine große Anzahl verschiedener Dinge bedeuten. In diesem Kapitel können Sie sich ein Zope-Objekt als ein Stück Software vorstellen, das Sie mit Hilfe eines Web-Browsers steuern und bearbeiten können.

Zope bringt viele integrierte Objekte mit, die Ihnen helfen, verschiedene Aufgaben durchzuführen. Sie können auch Zope-Objekte (Produkte) von Drittherstellern installieren, um Zopes Leistungsspektrum zu erweitern. Dieses Kapitel erklärt die grundlegendsten Objekte, und wie sie funktionieren. Sie können vollständig funktionierende Zope-Sites mit Hilfe der wenigen Grundobjekte erstellen, die in diesem Kapitel erläutert werden.

Dieses Kapitel ist in etwa gemäß der drei obigen Kategorien Inhalt, Logik und Darstellung strukturiert. Es gibt andere Arten von Objekten in Zope, die nicht eindeutig in einen dieser drei Aufgabenbereiche passen. Diese sind am Ende des Kapitels erklärt.

Zope-Ordner verwenden

Ordner (Folders, Anm. d. Üb.) sind die Bausteine von Zope. Der Zweck eines Ordners ist, andere Objekte zu enthalten und Objekte dadurch zu gliedern, dass er sie in verschiedene Gruppen unterteilt.

Ordner können alle Arten von Objekten einschließlich anderer Ordner enthalten, so dass Sie Ordner ineinander verschachteln können, um eine Baumstruktur von Ordnern zu erzeugen. Diese Art Anordnung von Ordnern innerhalb von Ordnern verleiht Ihrer Zope-Site Struktur. Eine gute Struktur ist sehr wichtig, da fast alle Aspekte von Zope (von Sicherheit über Verhalten zu Darstellung) von der Ordnerstruktur Ihrer Site beeinflusst werden.

Ordnerstrukturen sollten jedem sehr vertraut sein, der schon einmal mit Dateien und Ordnern mit einem Dateimanagerprogramm auf seinem Computer gearbeitet hat, wie dem Microsoft Windows Explorer oder irgendeinem der beliebten X-Dateimanager wie dem xfm, dem kfm, konqueror, Gnome-Dateimanager u.v.a. Das Zope-Management-Interface versucht, diesen bekannten Programmen so ähnlich wie möglich zu sein, so dass Sie mit der Verwaltung von Zope-Objekten ebenso vertraut sind, wie wenn Sie Dateien über Ihren Computer verwalten würden.

Ordnerinhalte verwalten

In Kapitel 2, "Zope verwenden", haben Sie Objekte erstellt und Objekte verschoben. Kurz gesagt, Sie erstellen Objekte in Ordnern durch das Wählen des Namens des gewünschten Objekts in der Auswahlliste am oberen Rand der Inhaltsübersicht. Dann füllen Sie das Erstellformular aus und schicken es ab. Ein neues Objekt wird dem aktuellen Ordner danach hinzugefügt. Über das verwenden der Schaltflächen Cut, Copy, Paste und Rename können Sie Objekte zwischen Ordnern bewegen.

Objekte importieren und exportieren

Sie können Objekte mit Hilfe von Export und Import von einem Zope-System zu einem anderen bewegen. Sie können alle Arten von Zope-Objekten in eine Exportdatei exportieren. Diese Datei kann dann in jedes andere Zope-System importiert werden.

Sie können sich das Exportieren eines Objekt wie das Klonen eines Stücks Ihres Zope-Systems in eine Datei vorstellen, die Sie sich dann von Rechner zu Rechner bewegen lässt. Sie können nun diese Datei nehmen und den Klon auf jeden anderen Zope-Server aufsetzen. Stellen Sie sich vor, Sie haben einige Dokumente in einem Zope-Ordner. Wenn Sie gerade jene Objekte zum Zope-System Ihres Freunds kopieren wollten, könnten Sie den Ordner exportieren und die Exportdatei per E-Mail an Ihren Freund senden, der ihn dann importieren könnte.

Nehmen wir an, Sie haben einen Ordner für Hausaufgaben, die Sie aus dem schulischen Zope-Server exportieren und mit nach Hause nehmen wollen, um daran an Ihrem heimischen Zope-Server weiterzuarbeiten. Sie können einen solchen Ordner Namens "Heimarbeit" in Ihrem Stammordner erstellen. Gehen Sie zum Ordner, der Ihren Ordner Heimarbeit enthält. Wählen Sie den Ordner Heimarbeit (im Beispiel Abbildung 3-1 homeWork) durch Abhaken des nebenstehenden Kontrollkästchens aus. Klicken Sie dann die Schaltfläche Import/Export. Sie sollten sich jetzt in der Ordner-Ansicht Import/Export befinden, wie in Abbildung 3-1 gezeigt.

The Import/Export View

Abbildung 3-1 Die Import-/Export-Ansicht

Es gibt zwei Bereiche in dieser Darstellung. Die obere Hälfte ist der Exportbereich, und die untere Hälfte ist der Importbereich. Um ein Objekt aus dieser Darstellung zu exportieren, geben Sie die ID des Objekts in das erste Formularfeld "Export object id" ein. In unserem Fall füllt Zope dieses Feld schon für uns aus, da wir den Ordner Heimarbeit bereits in der letzten Darstellung ausgewählt haben.

Die nächste Formularoption lässt Sie wählen, ob Sie die Exportdatei auf Ihren Computer herunterzuladen oder sie auf dem Server lassen wollen. Wenn Sie "Download to local machine" ("Auf lokalen Recher laden") aktivieren und auf die Schaltfläche Export klicken, fordert Sie Ihr Web-Browser dazu auf, die Exportdatei herunterzuladen. Wenn Sie "Save to file on server" ("Datei auf Server speichern") wählen, sichert Zope die Datei auf dem selben Rechner, auf dem Zope läuft und Sie müssen die Datei von diesem Standort selbst abholen. Die Exportdatei wird in Zopes var-Verzeichnis auf Ihrem Server geschrieben. Standardmäßig haben Exportdateien die Endung .zexp.

Im Allgemeinen ist es praktischer, die Exportdatei auf Ihren lokalen Rechner herunterzuladen. Manchmal ist es stattdessen angenehmer, die Datei auf den Server zu sichern, zum Beispiel wenn Sie eine langsame Verbindung haben und die Exportdatei sehr groß ist oder wenn Sie nur versuchen, das exportierte Objekt zu einer anderen Zope-Instanz auf dem selben Rechner zu bringen.

Das letzte Feld im Exportformular ist das "XML format?"-Kontrollkästchen. Wenn Sie dieses Kästchen ankreuzen, wird das Objekt im eXtensible Markup Language (XML)-Format exportiert. Ist dieses Kästchen nicht angekreuzt, wird die Datei in Zopes binärem Format exportiert. Das XML-Format ist beim Herunterladen zwar wesentlich größer, aber es ist für Menschen lesbar und kann als XML syntaktisch analysiert werden. Bis jetzt ist das einzige Werkzeug, das dieses Format versteht, Zope selbst, aber in Zukunft wird es vielleicht andere Hilfsprogramme geben, die Zopes XML Format verstehen können. Im Allgemeinen sollten Sie dieses Kästchen unangekreuzt lassen, es sei denn, Sie sind neugierig darauf, wie das XML-Format aussieht und wollen es von Hand prüfen.

Klicken Sie die Schaltfläche Export und sichern Sie Ihre Exportdatei Heimarbeit.zexp (Die Dateierweiterung zexp wird automatisch vergeben).

Nehmen wir jetzt an, Sie sind nach Hause gegangen und wollen die Datei in Ihren heimischen Zope-Server importieren. Zuerst müssen Sie die Exportdatei in das import-Verzeichnis Ihrer Zope-Installation kopieren. Dieses Verzeichnis finden Sie auf dem Rechner, auf dem Zope installiert ist. Gehen Sie jetzt zur Import-/Export-Ansicht des Ordners, in dem Sie den Import ausführen wollen. Geben Sie den Namen der Exportdatei in das Formualrfeld "Import file name" ein und klicken Sie auf Import, um die Objekte in Zope zu importieren.

Zope bietet Ihnen die Möglichkeit, entweder mit "Take ownership of imported objects" das importierte Objekt in Besitz zu nehmen oder mit "Retain existing ownership information" vorhandene Besitz-Informationen beizubehalten. Das Thema Besitz wird in Kapitel 7, "Benutzer und Sicherheit" näher erörtert . Lassen Sie zunächst das Kontrollkästchen "Take ownership of imported objects" abgehakt.

Nachdem Sie die Datei importiert haben, sollten Sie ein neues Objekt im Zope-Ordner vorfinden, in dem Sie den Import durchgeführt haben.

Zum Üben wiederholen Sie dieselbe Export- und Import-Vorgehensweise. Beachten Sie, dass Sie kein Objekt mit derselben ID in einen Ordner importieren können, in dem bereits ein vorhandenes Objekt mit gleichem Namens liegt. Deshalb müssen Sie sie in einen Ordner importieren, der noch keinen Ordner Heimarbeit enthält.

Temporäre Ordner

Temporäre Ordner (Temporary Folders) sind Zope-Ordner die dazu benutzt werden zeitlich begrenzte Objekte zu speichern. Temporäre Ordner verhalten sich fast genauso wie normale Ordner mit drei wesentlichen Unterschieden:

  1. Alles was sich in einem Temporäre Ordner befindet, verschwindet sobald man Zope neustartet.
  2. Man kann keine Aktionen rückgängig machen, die auf in einem Temporären Ordner enthaltenen Objekte angewandt wurden.
  3. Man kann keine Version verwenden, um Objekte in einem Temporäre Ordner zu verändern.

Standardmäßig gibt es einen Temporären Ordner Namens temp_folder in Ihrem Stammordner. Sie werden vielleicht bemerken, das sich in temp_folder ein Objekt Namens "Session Data Container" befindet. Dies ist ein Objekt, das von Zopes Standardkonfiguration der Sitzungsverwaltung benutzt wird. Für weitere Informationen zum Thema Sitzungen sehen Sie später im Abschnitt "Sitzungen verwenden" in diesem Kapitel nach.

Temporäre Ordner speichern ihren Inhalt eher im Arbeitsspeicher als in der Zope-Datenbank. Dies prädestiniert sie zum Speichern kleiner Objekte in die häufig geschrieben wird, wie Sitzungsdaten. Dennoch ist es eine schlechte Idee Temporäre Ordner zu verwenden, um große Objekte zu speichern, weil Ihrem Rechner dadurch möglicherweise nicht mehr genügend Arbeitsspeicher zur Verfügung steht.

Zope-Seitenvorlagen benutzen

In Zope 2.5,wurde ein neuer mächtiger Objekttyp Namens Page Templates ("Seitenvorlagen") eingeführt. Seitenvorlagen ermöglichen es, dynamische Darstellungen für eine Web-Seite zu definieren, indem man eine HTML-Vorlage schreibt. Der HTML-Code der Vorlage wird dadurch dynamisch, dass spezielle XML-Namensraum-Elemente in den HTML-Code eingefügt werden, die das dynamische Verhalten für die Seite definieren.

Seitenvorlagen sind aus mehreren Gründen sehr leistungssfähig:

  • Sie sind immer gültiges HTML. Es muss kein ungültiger Code in die Vorlagen eingefügt werden, wie man es bei anderen dynamischen Sprachen machen würde.
  • Seitenvorlagen trennen Logik von Darstellung. Da sie absichtlich ausschließlich auf die Darstellung abzielen, erlauben Ihnen Seitenvorlagen nicht sie als Allzweck-Programmiersprache zu verwenden.
  • HTML-Designer müssen keine Programmierer sein. Weil Seitenvorlagen aus HTML-Entwürfen heraus entwickelt werden, brauchen Ihre HTML-Designer nichts über Programmierung wissen, um das anfängliche Design einer Seitenvorlage entwickeln zu können.
  • Ihre Programmierer müssen keine HTML-Designer sein. Seitenvorlagen haben auch im umgekehrten Fall Vorteile, weil Ihre Programmierer Ihre Vorlagen dynamischen machen können, indem sie nur XML-Tag-Attribute hinzufügen. Sie können mit verschiedenen dynamischen Verhalten experimentieren ohne das ursprüngliche HTML zu zerstören oder neuzuschreiben.

Zope-Seitenvorlagen erstellen

Erzeugen Sie einen Ordner namens Vertrieb im Stammordner root. Klicken Sie auf den Ordner Verkäufe und wählen Sie dann Page Template aus der Produktauswahlliste aus, über die Sie in Kapitel 2 etwas erfahren haben. Dieses Vorgehen bringt Sie zum Erstellformular für eine Seitenvorlage. Tragen Sie als Id "Vertriebsseite" und als Titel "Vorlage für Vetriebsmitarbeiter" und klicken Sie auf Add. Sie haben erfolgreich eine Seitenvorlage erstellt. Jedoch ist deren Inhalt ein Standardblindtext. Fahren Sie also mit dem nächsten Schritt, der Bearbeitung des Inhalts, fort.

Zope-Seitenvorlagen bearbeiten

Der einfachste Weg eine Seitenvorlage zu bearbeiten ist, im Zope-Management-Interface auf ihren Namen oder ihr Symbol zu klicken. Wenn Sie auf eines dieser Elemente klicken, werden Sie zur Edit-Ansicht der Seitenvorlage weitergeleitet, die Ihnen einen Texteingabebereich zur Verfügung stellt in dem Sie die Vorlage bearbeiten können. Ersetzen Sie den ursprünglichen Inhalt, der bereits in der Seitenvorlage steht, mit dem folgenden HTML-Code:

        
          
            

Dies ist meine erste Seitenvorlage!

und klicken Sie auf Save. Nun können Sie auf den View-Reiter klicken um sich die Seitenvorlage anzusehen. Diese Vorlage im Speziellen macht nichts besonderes und besitzt auch kein dynamisches Verhalten. In späteren Abschnitten dieses Kapitels, werden wir dynamisches Verhalten hinzufügen. In Kapitel 5, werden Sie Seitenvorlagen noch wesentlich ausführlicher verwenden um dynamische Darstellungen zu erstellen.

Zope-Seitenvorlagen hochladen

Angenommen Sie möchten Ihre HTML-Vorlagen lieber nicht in einem Web-Browser bearbeiten oder Sie haben schon vorhandene HTML-Seiten die Sie in Zope bringen möchten. Zope ermöglicht Ihnen Ihre vorhandenen HTML-Dateien hochzuladen und Sie in Seitenvorlagen umzuwandeln.

Wählen Sie Page Template aus der Produktauswahlliste. Dies bringt Sie zum Erstellformular, das wir vorher gesehen haben. Das letzte Formularelement im Erstellformular ist die Schaltfläche Browse. Klicken Sie auf die Schaltfläche. Ihr Browser öffnet daraufhin ein Dialogfenster zur Dateiauswahl. Wählen Sie die Textdatei auf Ihrem Rechner aus, die Sie in die Seitenvorlage hochladen möchten.

Geben Sie eine Id für das neue Dokument an und klicken Sie auf Add. Nachdem Sie auf Add geklickt haben, gelangen Sie wieder zurück zur Verwaltungsansicht. Hier sehen Sie Ihre neue Seitenvorlage.

Zope-Dokumente verwenden

Dokumente enthalten Text. In Webanwendungen verwendet man Dokumente im Allgemeinen, um Web-Seiten zu erstellen. Man kann Dokumente auch verwenden, um Textdateien, Textteile oder HTML-Code wie Sidebars oder Kopfzeilen zu speichern. Zusätzlich zum Speichern von Text erlaubt ein Dokument Ihnen, den Text über das Netz zu bearbeiten. Zope hat mehrere verschiedene Arten von Dokumenten. Das wichtigste ist DTML-Dokument. DTML steht für Document Template Markup Language.

Andere Objekttypen von Drittherstellern (im Allgemeinen "Produkte", engl. Products, genannt) und stehen auf Orten wie Zope.org zur Verfügung. Sie erweitern Ihre Installation dahingehend, dass andere Arten von textlichem und nicht-textlichem Inhalt unterstützt werden.

DTML-Dokumente

DTML-Dokumente verwendet man, um Web-Seiten und Dokumentenabschnitte, wie Sidebars zu erstellen, die Webseiten gemeinsam nutzen. DTML-Dokumente können Scripting-Befehle in DTML (Zopes tag-basierter Scripting-Sprache) enthalten. Die Mischung aus HTML und DTML erzeugt dynamische Web-Seiten.

DTML-Dokumente sind auch dazu geeignet, gemeinsam genutzten Inhalt, wie häufige Dokumentstrukturen, zu erstellen.

DTML-Dokumente erstellen

Klicken Sie auf den Ordner Vertrieb und wählen Sie danach DTML Document aus der Produktauswahlliste. Dieses Vorgehen bringt Sie zum Erstellformular für ein DTML-Dokument. Geben Sie die ID "Vetriebsmitarbeiter" und den Titel "Die Dschungel-Vertriebsmitarbeiter" an und klicken Sie auf Add. Sie haben erfolgreich ein DTML-Dokument erstellt. Jedoch ist dessen Inhalt ein Standardblindtext. Fahren Sie also mit dem nächsten Schritt, der Bearbeitung des Inhalts, fort.

DTML-Dokumente bearbeiten

Die einfachste und schnellste Art, ein DTML-Dokument zu bearbeiten, ist über das Management-Interface. Um ein Dokument auszuwählen, klicken Sie auf dessen Namen oder sein Symbol, was das in Abbildung 3-2 gezeigte Formular öffnet.

Bearbeiten eines DTML-Dokuments.

Abbildung 3-2 Bearbeiten eines DTML-Dokuments.

Diese Ansicht zeigt ein Textfeld, in welchem Sie den Inhalt Ihres Dokuments bearbeiten können. Wenn Sie auf die Schaltfläche Change klicken, bestätigen Sie alle Änderungen, die Sie im Textbereich vorgenommen haben. Sie können die Größe des Textbereichs mit den Schaltflächen Taller (höher), Shorter (kürzer), Wider (breiter) und Narrower (schmaler) kontrollieren. Sie können auch mit dem Eingabefeld File und der Schaltfläche Upload File eine neue Datei in das Dokument laden.

Löschen Sie den Standardinhalt, der automatisch im aktuellen DTML-Dokument Vetriebsmitarbeiter erscheint.

Fügen Sie in das Vetriebsmitarbeiter-Dokument folgenden HTML-Inhalt ein:

        
        
        

Die Dschungel-Vetriebsmitarbeiter

  • Tarzan
  • Cheetah
  • Jane

Nachdem Sie die Änderungen an Ihrem Dokument abgeschlossen haben, klicken Sie auf die Schaltfläche Change. Zope gibt eine Nachricht zurück, die Ihnen mitteilt, dass Ihre Änderungen angewendet wurden. Jetzt können Sie das Dokument durch Klicken des View-Reiters ansehen.

Herzlichen Glückwunsch! Sie haben gerade Zope verwendet, um eine HTML-Seite zu erstellen. Sie können die Erstellung/Bearbeitung in einem Vorgang statt in zweien durchführen, indem Sie die Schaltfläche Add and Edit auf der Erstellseite verwenden.

Sie können Ihren HTML-Code online bearbeiten und ihn sofort betrachten. Sie können sogar ganze Zope-Sites mit HTML-Dokumenten und Ordnern erstellen. Dieser Vorgang zeigt Ihnen nur einen Teil der Vorteile von Zope, er ist aber eine gute Art, sich mit Zope vertraut zu machen. Sie können auch dynamischen Inhalt in Zope verfassen und können jene, die nur am Design interessiert sind, ihre eigenen HTML-Web-Seiten auf diese Weise bearbeiten lassen.

Eine HTML-Datei hochladen

Angenommen Sie ziehen es vor, Ihre HTML-Dateien nicht in einem Web-Browser zu bearbeiten, oder Sie haben bereits einige vorhandene HTML-Seiten, die Sie gerne in Zope bringen würden. Zope erlaubt Ihnen, Ihre vorhandenen Textdateien hochzuladen und sie in DTML-Dokumente umzuwandeln.

Wählen Sie DTML Document aus der Produktauswahlliste. Dies bringt Sie zum Erstellformular für DTML-Dokumente. Das letzte Formularfeld auf dem Erstellformular ist die Schaltfläche Browse. Klicken Sie auf diese Schaltfläche. Ihr Browser öffnet daraufhin einen Dateiauswahldialog. Wählen Sie die Textdatei auf Ihrem Computer aus, die Sie in dieses Dokument laden wollen.

Geben Sie in eine Id für das neue Dokument und klicken Sie auf Add. Nach dem Klicken auf Add werden Sie zurück auf den Management-Seite gebracht. Dort sehen Sie Ihr neues Dokument.

DTML-Dokumente betrachten

Der Hauptverwendungszweck eines DTML-Dokuments ist es, nützlichen Inhalt zu speichern. Der Hauptverwendungszweck dieses Inhalt ist es, betrachtet zu werden. DTML-Dokumente können auf mehrere verschiedene Arten betrachtet werden:

Das Management-Interface
Vom Management-Interface aus kann man auf den View-Reiter eines Dokuments klicken, um den Inhalt des Dokuments zu betrachten.
Direkter Aufruf über das Web
Dokumente können direkt über das Web aufgerufen werden, indem man mit einem Web-Browser zu ihrem URL-Standort geht.
Aufruf durch ein anderes Objekt
Andere Objekte, besonders andere DTML-Objekte, können den Inhalt eines Dokuments darstellen.

Über das Web aufrufen

Wie alle Zope-Objekte, basiert der URL eines DTML-Dokuments auf seiner ID-Kennung. Wenn man zum Beispiel ein DTML-Dokument namens Bob im Stammordner hat, dann wäre sein URL:

        http://localhost:8080/Bob

Wenn sich Bob in einem Onkel genannten Unterordner befindet, dann wäre sein URL:

        http://localhost:8080/Onkel/Bob

Es könnte auch andere DTML-Dokumente namens Rick, Danny und Louis im Onkel-Ordner geben. Auf sie greifen Sie durch das Web ebenso zu:

        http://localhost:8080/Onkel/Rick
        http://localhost:8080/Onkel/Danny 
        http://localhost:8080/Onkel/Louis

URLs in Objekte zu übersetzen, ist keine neue Idee, Web-Server wie Apache tun das die ganze Zeit über, sie übersetzen URLs in Dateien und Verzeichnisse auf einem Dateisystem. Zope führt diese einfache Idee weiter. In Zope sind URLs immer einfach zu lesen, weil sie sich leicht und einfach auf die Art abbilden lassen, wie Objekte in Zope organisiert sind. Darum haben wir Ihnen gesagt, dass die Struktur Ihrer Site der Schlüssel für den Erfolg Ihrer Site ist.

Direkt zum URL eines DTML-Dokument zu gehen, wird durch das Web aufrufen genannt. Dies bewirkt, dass der Inhalt des DTML-Dokuments ausgewertet und an Ihren Web-Browser zurückgegeben wird. Im nächsten Kapitel über DTML sehen wir, was es bedeutet, wenn DTML ausgewertet wird, aber zunächst können Sie einfach mit DTML und simplem HTML-Inhalt experimentieren, um eine Vorstellung davon zu bekommen.

Aufruf durch ein anderes Objekt

Beim Verwenden von Zope sind Ihnen wahrscheinlich DTML-Beispiele wie dieses begegnet:

        

          

Dies ist ein einfaches HTML-Dokument.

Hier kann man sehen, dass ein DTML-Objekt, standard_html_header, von dem Dokument aufgerufen wird. In diesem Fall ist der ausgewertete Inhalt des ersten Dokuments in den Inhalt dieses aufrufenden Dokuments eingefügt worden. Dies ist ein sehr grundlegendes Konzept in Zope und wird überall in diesem Buch verwendet.

Änderungen an Dokumenten verfolgen

Der Undo-Reiter ermöglicht es Ihnen eine oder mehrere Transaktion rückgängig zu machen. Erinnern Sie sich: Eine Transaktion kann eine Gruppe von Aktionen sein, die alle zur selben Zeit getätigt wurden. Wenn ein Dokument in einer Transaktion bearbeitet wurde, die auch das Verschieben eines Objektes beinhaltete, kann es sein, dass Sie zwar die Änderung am Dokument, nicht aber das Verschieben der Datei widerrufen wollen. Um das zu tun, können Sie zur History-Ansicht des Objekts gehen und sich die vorherigen Zustände des Objekts ansehen, wie in Abbildung 3-4 gezeigt.

Die History-Ansicht.

Abbildung 3-4 Die History-Ansicht.

Dokumente unterstützen sogar die Idee der vergleichenden Revisionen, und ermöglichen Ihnen somit, Änderungen an Ihren Objekten zu verfolgen. Zum Beispiel erlauben DTML-Methoden und -Dokumente Ihnen, zwei Überarbeitungen auszuwählen und sie mit einander zu vergleichen. Sie könnten das auch dazu verwenden, um zu sehen, welche Leute Ihr Objekt verändert haben. Lassen Sie uns zum Beispiel sagen, dass Sie ein Dokument hatten, das eine Liste aller der Tiere in einem Zoo enthielt. Wenn eine(r) Ihrer KollegInnen dann beginnt diese Liste zu bearbeiten und sie speichert, können Sie die Protokollvergleichsfunktion verwenden, um die aktuellste "neue" Version der Datei mit der nächsten aktuellsten Version zu vergleichen.

Dieser Vergleich wird im weitverbreiteten diff-Format angezeigt. Das Diff zeigt Ihnen die Zeilen an, die dem neuen Dokument hinzugefügt worden sind (über ein Plus), welche Zeile vom alten Dokument entfernt worden ist (über ein Minus), und welche Zeile ersetzt oder verändert worden ist (über ein Ausrufezeichen).

Fernbearbeitung mit FTP, WebDAV und PUT

Zope ermöglicht Ihnen Dokumente direkt in Ihrem Web-Browser zu bearbeiten, obwohl dies nicht die einzige Art ist, wie Dokumente in Zope bearbeitet werden können. Für einfache Dokumente ist das Bearbeiten über das Web eine praktische Methode. Aber für große, komplexe Dokumente oder Dokumente, die eine spezielle Formatierung haben, ist es nützlich, in der Lage zu sein, den Editor zu verwenden, mit Sie am vertrautesten sind.

DTML-Dokumente können per FTP, WebDAV und das HTTP-PUT-Protokoll bearbeitet werden. Viele HTML- und Texteditoren unterstützen diese Protokolle für das Bearbeiten von Dokumenten über entfernte Server. Jedes dieser Protokolle hat Vor- und Nachteile:

FTP
FTP ist das "File Transfer Protocol" ("Dateitransferprotokoll"). FTP wird verwendet, um eine Datei von einem Rechner auf einen anderen zu übertragen. Viele Texteditoren unterstützen FTP, so dass es sehr hilfreich ist.
WebDAV
WebDAV ist ein neues Internetprotokoll basierend auf dem, dem Web zugrunde liegenden Protokoll, HTTP. DAV steht für "Distributed Authoring and Versioning" ("Verteilte Bearbeitung und Versionsverwaltung"). Weil DAV neu ist, wird es wahrscheinlich nicht von so vielen Texteditoren unterstützt wie FTP.
PUT
Das HTTP-Protokoll unterstützt einen einfachen Weg, Inhalte auf einen Server hochzuladen, genannt PUT. PUT wird von vielen HTML-Editoren wie dem Netscape Composer unterstützt.

Mit einer dieser Methoden können Sie Ihren Inhalt mit einer Vielfalt an Hilfsprogrammen bearbeiten. In den nächsten paar Abschnitten werden wir Ihnen einige einfache Hilfsprogramme zeigen, die FTP verwenden, um Zope zu bearbeiten.

Dokumente und Dateien mit WS_FTP hochladen

FTP ist ein beliebter FTP-Client für Windows, den Sie verwenden können, um Dokumente und Dateien in Zope über das FTP-Protokoll hochzuladen. WS_FTP kann von der Ipswitch-Homepage heruntergeladen werden.

Es gibt andere beliebte Windows-FTP-Clients und viele Web-Browser, wie Netscape und der Microsoft Internet Explorer besitzen FTP-Clients. Dieser Abschnitt gilt auch für andere FTP-Clients.

In Kapitel 2, "Zope verwenden", bestimmten Sie den URL Ihres Zope-Systems mit Hilfe des Startprotokolls. Um herauszufinden, wie man den FTP-Server Ihres Zopes anspricht, folgen wir einer ähnlichen Vorgehensweise:

        ------
        2000-08-07T23:00:53 INFO(0) ZServer Medusa (V1.18) started at Mon Aug  7 
  16:00:53 2000
                Hostname: erdnuss
                Port:8080

        ------
        2000-08-07T23:00:53 INFO(0) ZServer FTP server started at Mon Aug  7 
  16:00:53 2000
                Authorizer:None
                Hostname: erdnuss
                Port: 8021
        ------
        2000-08-07T23:00:53 INFO(0) ZServer Monitor Server (V1.9) started on port 
  8099  

Das Systemstartprotokoll sagt, dass der Zope-FTP-Server auf Port 8021 auf dem Rechner mit dem Namen erdnuss läuft. Wenn Sie WS_FTP starten, müssen Sie den Rechnernamen und Port-Informationen haben, so dass Sie sich an Zope mittels FTP anmelden können. Nach dem Eingeben des Rechnernamen und des Ports Ihres Zope-Servers klicken Sie auf die Schaltfläche Connect. WS_FTP bittet Sie jetzt um einen Benutzernamen und Kennwort. Geben Sie Ihren Verwaltungs-Benutzernamen und -Kennwort für das Zope-Management-Interface ein.

Wenn Sie Ihren Benutzernamen und Ihr Kennwort korrekt eingeben haben, zeigt Ihnen WS_FTP, wie Ihre Zope-Site in FTP aussieht. Es gibt Ordner und Dokumente, die genau denen entsprechen, die Sie in Ihrem Zope-Stammordner im Web sehen, wie in Abbildung 3-3 gezeigt.

Bearbeiten von Zope per FTP.

Abbildung 3-3 Bearbeiten von Zope per FTP.

Dateien zu und von Zope zu übertragen, ist eine sehr leichte Aufgabe mit WS_FTP. Auf der linken Seite des WS_FTP-Fensters ist eine Dateiauswahlliste, die die Dateien auf Ihrem lokalen Rechner darstellt. Die Dateiauswahlliste auf der rechten Seite des WS_FTP-Fensters stellt die Objekte in Ihrem Zope-System dar. Dateien von Ihrem Computer auf Zope oder wieder zurück zu übertragen, ist leicht. Wählen Sie die Datei aus die Sie übertragen wollen und klicken Sie entweder auf den linken Pfeil (Herunterladen) oder auf den rechten Pfeil (Hochladen). WS_FTP hat viele Funktionen und Benutzereinstellungen, die Sie benutzen können, um die Objektverwaltung auf entfernten Rechnern mit Zope sehr einfach zu gestallten.

Zope-Objekte mit Emacs bearbeiten

Emacs ist ein sehr beliebter Texteditor. In der Tat ist Emacs mehr als nur ein Texteditor, er ist eine ganze Kultur. Emacs gibt es in zwei Varianten, GNU Emacs und XEmacs. Beide dieser Varianten von Emacs können direkt über FTP arbeiten, um Zope-Dokumente und andere Textinhalte zu verändern.

Emacs behandelt jedes entferne FTP-System wie jedes andere lokale Dateisystem, was die Fernverwaltung von Zope-Inhalten zu einem einfachen Vorgang werden lässt. Deshalb müssen Sie Emacs nicht verlassen, um Zope zu verwenden.

Emacs liefert einen größeren Umfang an Textbearbeitungsmöglichkeiten, als die meisten Web-Browser-Textfelder. Emacs kann verwendet werden, um Dokumente direkt zu bearbeiten und Objekte per FTP zu verändern, Emacs ist deshalb eine nette Zope-Entwicklungsumgebung.

Wenn Sie Zope starten, lässt Zope standardmäßig einen FTP-Server laufen, genau wie es einen HTTP-Server laufen lässt. Sie können zwar angeben, auf welchem Port der FTP-Server laufen soll wenn Sie Zope starten, standardmäßig ist dieser Port jedoch 8021.

Um sich in Zope anzumelden, starten Sie Emacs. Die Datei die Sie aufrufen, um eine FTP-Verbindung herzustellen, hängt davon ab, welchen Texteditor Sie benutzen: XEmacs oder Emacs:

Xemacs
Um eine entfernte Datei in XEmacs zu öffnen, rufen Sie eine Datei folgendermaßen auf:
            /user@server#port:/

Dies öffnet eine Verbindung zum Ordner / des FTP-Servers der auf dem Server server und Port port läuft.

Emacs
Um eine entfernte Datei in Emacs zu öffnen, rufen Sie eine Datei folgendermaßen auf:
          /user@server port:/

Das Leerzeichen wird eingefügt, indem man die Strg-Taste und die Taste Q gedrückt hält und danach die Leertaste drückt "Strg-Q ".

Bei einer typischen Zope-Installation ist der Dateiname mit dem in XEmacs eine FTP-Sitzung mit Zope zu öffnen */user@localhost#8021:/*.

Emacs fragt Sie nach einem Kennwort für die Anmeldung unter Zopes FTP-Server.

Wenn Sie den Ordner / eines FTP-Server in Zope betrachten, listet Emacs den Inhalt des Stammordners auf:

        drwxrwx---   1 Zope     Zope            0 Dec 30  1998 Control_Panel
        drwxrwx---   1 Zope     Zope            0 Dec 30  1998 QuickStart
        drwxrwx---   1 Zope     Zope            0 Dec 30  1998 Vetrieb
        -rw-rw----   1 Zope     Zope         1024 May  3  1999 index_html
        -rw-rw----   1 Zope     Zope         1381 May  3  1999 
  standard_error_message
        -rw-rw----   1 Zope     Zope           55 Dec 30  1998 
  standard_html_footer
        -rw-rw----   1 Zope     Zope           81 Dec 30  1998 
  standard_html_header

Sie können alle diese "Dateien" (die in Wirklichkeit Zope-Objekte sind) öffnen, indem Sie sie auf die übliche Emacs-Weise auswählen. Mit Emacs zu arbeiten ist sehr nützlich, aber für den größten Teil ist Emacs ein sehr komplexes Programm, das den meisten Leuten nicht gerade sehr zugänglich ist. Die meisten Macintosh-Nutzer wären zum Beispiel mit einem Hilfsprogramm wie Emacs nicht sehr vertraut. Es gibt viele "einfachere" Editoren, die benutzt werden können, die auch FTP und WebDAV verwenden. Tatsächlich ist WebDAV dafür entwickelt worden, mit Hilfsprogrammen wie Adobes GoLive und Macromedias Dreamweaver verwendet zu werden.

DTML-Dokumente mit WebDAV bearbeiten

WebDAV ist ein, verglichen mit HTTP oder FTP, neueres Internetprotokoll, so dass es weniger Clients gibt, die es unterstützen. Es herrscht jedoch viel Bewegung in der WebDAV-Bewegung, und immer mehr Clients werden entwickelt. Für weitere Informationen darüber, welche Programme das WebDAV-Protokoll unterstützen, sehen Sie auf der WebDAV-Homepage nach.

WebDAV ist eine Erweiterung des HTTP-Protokolls, das viele Funktionen für das gleichzeitige Verfassen und Bearbeiten von Inhalten durch mehre Benutzer bereitstellt. WebDAV bietet Funktionen wie die Sperrung von Dateien, Versionsverwaltung und das Versehen von Dokumenten oder Objekten mit Eigenschaften. Weil die Ziele von WebDAV des Über-Das-Netz-Bearbeitens mit einigen der Ziele von Zope übereinstimmen, unterstützt Zope das WebDAV-Protokoll schon seit einiger Zeit.

Das WebDAV-Protokoll entwickelt sich schnell, und immer wieder werden neue Funktionen hinzugefügt. Sie können jeden WebDAV-Client verwenden, um Ihre DTML-Dokumente durch einfaches Verweisen des Clients auf den URL Ihres Dokuments zu bearbeiten. Die meisten Clients veranlasst dies jedoch, zu versuchen, das Ergebnis der Dokument-Darstellung zu bearbeiten, nicht den Quelltext. Für Dokumente, die Zopes Vorlagensprache DTML verwenden, um dynamischen Inhalt wiederzugeben, kann dies ein Problem sein.

Solange Clients nicht den neusten WebDAV-Standard unterstützen und den Unterschied zwischen dem Quelltext eines Dokuments und seines Darstellungsergebnisses verstehen, bietet Zope einen speziellen HTTP-Server an, den Sie mit einer Befehlszeilenoption -W aktivieren können. Dieser Server läuft auf einem anderen Port als Ihr normaler HTTP-Server und gibt anderen, speziellen Quelltextinhalt für WebDAV-Anforderungen zurück, die diesen Port ansprechen. Dies ist ein fortgeschrittenes Merkmal und wird tiefgehender im Documentation-Bereich von Zope.org erklärt.

Zope-Dateien verwenden

Zope-Dateien (Files) enthalten Rohdaten, genau wie die Dateien auf Ihren Computer. Viele Informationen wie Programme, Audio-Informationen, Videos und Dokumente werden im Internet und um die Welt als Dateien transportiert. Sie können Dateien verwenden, um jede Art von Information zu speichern, die Zope nicht ausdrücklich unterstützt, wie Flash-Dateien, Applets, Tarball-Archive usw.

Dateien gehen nicht davon aus, dass ihr Inhalt in einem speziellen Format vorliegt, textuell oder andersgeartet. Dateien sind gut dafür geeignet, jede Art von binärem Inhalt zu speichern, der auf irgendeine Art nur rohe Computerinformation ist. Dateien sind auch dafür geeignet um textuellen Inhalt zu speichern, der kein DTML-Scripting benötigt.

Jedes Datei-Objekt hat einen bestimmten Inhaltstyp (Content Type), der eine Standard-Internet-MIME-Kennzeichnung für einen Dateityp ist. Wenn Sie eine Datei in Zope hochladen, versucht Zope, den Inhaltstyp aufgrund des Namens der Datei zu erraten, aber Zope rät nicht immer richtig.

Dateien hochladen

Wie auch DTML-Dokumente und -Methoden erlauben Dateien Ihnen, eine Datei von Ihrem Computer hochzuladen, wenn Sie ein neues Objekt erstellen. Klicken Sie auf die Schaltfläche Browse, um eine Datei von Ihrem lokalen Computer beim Erstellen eines neuen Zope-Files zu wählen. Versuchen Sie, eine Datei, etwa eine Word-Datei (.doc) oder eine Date im "Portable Document Format" (.pdf) zu wählen. Beachten Sie, dass, wenn Sie eine Datei mit Ihrem Browser hochladen, Sie eventuell den Dateityp nach dem Sie suchen im Hochlade-Dialog Ihres Browsers angeben müssen. Nach Sie eine Datei ausgewählt haben, die hochgeladen werden soll, klicken Sie Add. Je nach der Größe der Datei, die Sie hochladen wollen, kann es einige Minuten dauern, bis Zope die Datei hinzufügt.

Nach dem Hinzufügen der Datei klicken Sie auf die neue Datei und betrachten Sie seine Edit-Ansicht. Hier sehen Sie, dass Zope den Inhaltstyp erraten hat, wie in Abbildung 3-5 gezeigt.

Die Eigenschaft "Content Type"

Abbildung 3-5 Die Eigenschaft "Content Type"

Wenn Sie ein Word-Dokument hinzufügen, ist der Inhaltstyp application/msword. Wenn Sie eine PDF-Datei hinzufügen, ist der Inhaltstyp application/pdf. Wenn Zope den Dateityp nicht erkennt, wählt es den Standardwert, die allgemeine Inhaltsart application/octet-stream.

Sie können den Inhalt eines vorhandenen Files über das Öffnen der Ansicht Upload ändern. Hier können Sie den Inhalt der Datei durch eine neue Datei ersetzen. Wenn Sie die Felder Id und Title in diesem Formular nicht ausfüllen und Sie eine Datei hochladen, wird Zope den Dateinamen als Kennung und Titel des Objekts verwenden.

Dateien bearbeiten

Falls Ihre Datei Text enthält und kleiner als 64kB ist, können Sie sie mit dem Management-Interface bearbeiten. Text-Dateien sind Dateien deren Inhaltstyp mit text/ beginnt, wie text/html oder text/plain. Manchmal ist es bequemer Textdateien über das Management-Interface zu verändern. Nichtsdestotrotz können Sie Dateien auch lokal bearbeiten und Sie dann in Zope hochladen.

Dateien betrachten

Sie können eine Datei durch Öffnen des Reiters View im Management-Interface betrachten. Sie können eine Datei auch durch aufrufen seines URLs ansehen. In Wirklichkeit ist der Reiter View nur eine Methode vom Zope-Management-Interface aus zum URL einer Datei zu kommen. Wenn Sie zum Beispiel eine Datei namens mitarbeiterVertrag.pdf in Ihrem Zope-Stammordner haben, dann können Sie diese Datei in Ihrem Web-Browser durch aufrufen des URL http://localhost:8080/mitarbeiterVertrag.pdf betrachten. Je nach Art der Datei kann Ihr Web-Browser die Datei anzeigen oder sie herunterladen.

Zope-Bilder verwenden

Bilder (Images) stellen Grafiken wie GIF-, JPEG- und PNG-Dateien dar. In Zope sind Bilder ähnlich wie Datei-Objekte, beinhalten aber zusätzliche Funktionen für das Verwalten grafischen Inhalts.

Bildobjekte haben dasselbe Management-Interface wie Dateiobjekte. Alles aus dem vorherigen Abschnitt, wie man File-Objekte verwendet gilt auch für Images. Bildobjekte zeigen Ihnen jedoch eine Vorschau des Bildes wenn Sie sie hochladen.

Viewing Images with HTML

Die häufigste Verwendung für Bilder in Zope ist das einbinden von Bildern in Web-Seiten. Um ein Bild auf eine Web-Seite zu bringen, müssen Sie das HTML-IMG-TAG verwenden. Angenommen, Sie haben ein Bild namens logo in Ihrem Stammordner, das eine Abbildung Ihres Firmenlogos enthält.

Dieses Bild in HTML-Code zu verwenden, ist ein einfacher Vorgang: Sie können auf es mit einem IMG-Tag verweisen, wie Sie es auch tun würden, um jede Art von Bildern in eine Web-Seite einzubinden:

        

          

          

Willkommen!

In diesem Beispiel verweisen Sie auf das Bild logo durch Erstellen eines HTML-IMG-TAGs. Es ist aber normalerweise nicht notwendig, Ihre eigenen IMG-Tags zu erstellen, um Bilder anzuzeigen. Bildobjekte wissen, wie sie ihre eigenen HTML-Tags generieren müssen. Wenn Sie ein Bildobjekt in DTML einfügen, generiert es ein IMG-Tag für sich selbst.

Jetzt wollen wir, dass dieses Logo auf jeder Seite in der linken oberen Ecke erscheint, also erstellen wir einen Verweis darauf in der Methode standard_html_header:

        
          
            

Betrachten Sie jetzt den Stammordner indem Sie auf dessen View-Reiter klicken. Wenn Sie den Quelltext der Web-Seite ansehen, die Zope erstellt, können Sie erkennen, dass der var-DTML-Code für Sie in ein HTML-IMG-TAG umgewandelt wurde:

        
          
            

Den DTML-Befehl var zu verwenden, um Bilder darszustellen, macht die Dinge einfacher, da Zope die Werte der height- und width-Attribute des IMG-Tags für Sie automatisch herausfindet. Wenn es Ihnen nicht gefällt, wie Zope ein IMG-Tag erzeugt, kann es angepasst werden. Konsultieren Sie Anhang B für weitere Informationen über das Image-Objekt und wie es das IMG-Tag steuern kann.

Es gibt eine Reihe von Zope-Objekttypen von Drittherstellern (allgemein "Produkte" genannt) zum Speichern und Betrachten von Bildinhalt im Abschnitt "visual" von Zope.org.

Bilder über das Netz betrachten

Bilder können direkt durch das Besuchen ihres URL in Ihrem Web-Browser betrachtet werden. Lassen Sie uns beispielsweise annehmen, dass Sie Ihr Firmenlogo direkt sehen wollen. Das Logo existiert als bildobjekt in Ihrem Stammordner. Es heißt logo. Sie können es leicht betrachten, indem Sie direkt zu seinem URL http://localhost:8080/logo gehen.

Da Zope-Bilder genauso wie auf einem normalen Web-Server gespeicherte Bilder funktionieren, können Sie auf Ihre Zope-Bilder von anderen Web-Servern zugreifen. Einmal angenommen Sie haben ein Zope-Bild dessen URL http://imageserver:8080/Voegel/Sittich.jpg lautet, so können Sie dieses Bild in jede Web-Seite auf jedem Web-Server mit Hilfe des absoluten URLs des Bildes einbinden:

        

        

Remote Image

Dieses Beispiel zeigt, wie Sie Zope-Daten außerhalb von Zope verwenden können, indem Sie Standard-Internet-Protokolle verwenden. Später, in Kapitel 10 "Zope-Scripting für Fortgeschrittene", sehen wir, wie Sie die meisten Zope-Objekte Dienste der Außenwelt anbieten können.

Objekteigenschaften verwenden

Eigenschaften (Properties) sind eine Möglichkeit Informationen mit Objekten in Zope zu verknüpfen. Viele Zope-Objekte, einschließlich Ordner und Dokumente, unterstützen Eigenschaften. Eigenschaften können ein Objekt kennzeichnen, um seinen Inhalt zu identifizieren, (viele Zope-Inhalts-Objekte haben eine Inhaltstyp-Eigenschaft namens Content-Type). Eine andere Verwendung von Eigenschaften ist das Bereitstellen von Metadaten für ein Objekt wie seinen Autor, seinen Titel, seinen Status, usw.

Eigenschaften können komplexer als Zeichenfolgen sein. Sie können auch Nummern, Listen oder andere Datenstrukturen sein. Alle Eigenschaften werden über die Ansicht Properties verwaltet. Klicken auf den Reiter Properties eines Ordners und Sie kommen zur Ansicht für die Eigenschaftenverwaltung (wie in Abbildung 3-6 gezeigt).

Die Ansicht zum Verwalten von Eigenschaften

Abbildung 3-6: Die Ansicht zum Verwalten von Eigenschaften

Eine Eigenschaft besteht aus einem Namen, einem Wert und einem Typ. Der Typ einer Eigenschaft definiert, welche Werte sie haben kann.

In Abbildung 3-6 können Sie sehen, dass der Ordner drei Eigenschaften hat: title, Author und KeyWords. Die Eigenschaften title und Author string-Eigenschaften sind (Zeichenfolgen), während die Eigenschaft KeyWords vom Typ tokens ist. Eine tokens-Eigenschaft entspricht einer Folge von Wörtern.

Zope unterstützt eine Vielzahl von Eigenschaftstypen. Jeder Typ ist für eine bestimmte Aufgabe geeignet. Diese Liste gibt einen kurzen Überblick über die Arten von Eigenschaften, die Sie im Management-Interface erstellen können:

string (Zeichenfolge)
Ein String ist eine Folge von Zeichen in beliebiger Länge. Strings sind die am grundlegendsten und nützlichsten Eigenschaften in Zope..
int (Ganzzahl)
Eine Int-Eigenschaft ist eine Ganzzahl, das jede positive oder negative Zahl annehmen kann, die keine Nachkommastellen hat ist. Ein Int hat garantiert eine Genauigkeit von mindestens 32 Bits.
long (lange Ganzzahl)
Ein Long ist wie eine Ganzzahl, das keine Bereichseinschränkung hat.
float (Fließkommazahl)
Ein Float speichert eine Fließkomma- oder Dezimalzahl. Für monetäre (geldliche) Werte wird zum Beispiel oft Float verwendet.
lines (Zeilen)
Eine Lines-Eigenschaft ist eine Folge von Zeichenfolgen.
tokens
Eine Token-Eigenschaft ist eine Liste von durch Leerzeichen getrennten Wörtern.
text
Eine Text-Eigenschaft ist in etwa wie eine String-Eigenschaft, außer dass Zope die Zeilenumbruch-Zeichen anpasst (verschiedene Browser verwenden verschiedene Zeilenumbruchskonventionen).
selection (Auswahl)
Ein Selection-Eigenschaft ist etwas spezielles. Sie wird verwendet, um ein HTML-Eingabefeld für eine Auswahlliste auszugeben.
multiple selection (Mehrfachauswahl)
Eine Multiple-Selection-Eigenschaft ist etwas besonderes. Sie wird verwendet, um ein HTML-Eingabefeld für eine Mehrfachauswahlliste auszugeben.

Eigenschaften sind sehr nützliche Hilfsmittel für das Kennzeichnen Ihrer Zope-Objekte mit kleinen Einheiten von Daten oder Information. In Verbindung mit Methoden und Skripten machen Eigenschaften das Erweitern einfacher Objekte, wie Ordner, zu einer sehr leistungsfähigen Methode.

Logik mit Skripten programmieren

In traditioneller Programmierersprache ist ein Skript ein in einer Programmiersprache geschriebenes kurzes Stück Quelltext. Seit Version 2.3 bietet Zope zwei Arten von Skriptobjekten: eine, mit der Sie Skripte in Python schreiben können, und eine, mit der Sie Skripte in Perl schreiben können.

Sowohl Python als auch Perl sind sehr beliebte und leistungsfähige Programmiersprachen. Sowohl Python als auch Perl haben gemeinsame, ähnliche Merkmale: Sie bieten beide eine leistungsfähige, rasche Entwicklung, eine einfache Syntax, viele Add-On-Bibliotheken, eine starke Unterstützung durch ihre Benutzergemeinde und ein reichhaltiges Angebot an kostenloser Online-Dokumentation. Beide Sprachen sind auch Open-Source.

Weil Skripte so leistungsfähig und flexibel sind, sind ihre Anwendungsmöglichkeiten endlos. Skripte werden in erster Linie verwendet, um so genannte Geschäftslogik zu schreiben. Geschäftslogik ist etwas anderes als Darstellungslogik. Darstellungslogik wird normalerweise in einer Präsentationssprache wie DTML geschrieben, und ihr Zweck ist es Informationen einem Benutzer zu präsentieren. Geschäftslogik wird normalerweise in eine Scripting-Sprache geschrieben, und ihr Zweck ist es Informationen zu verändern, die aus Inhaltsquellen (wie Dokumenten oder Datenbanken) stammt, oder andere Objekte zu manipulieren. Darstellungslogik baut oft auf der Geschäftslogik auf.

Ein einfaches Beispiel für die Verwendung von Skripten ist die Erstellung eines Online-Webformulars, um Ihren Benutzern zu helfen, den Zinseszinsbetrag ihrer Schulden zu berechnen. Diese Art von Berechnung schließt folgende Prozedur ein:

  1. Sie brauchen folgende Informationen: Ihren aktuellen Saldo (oder Ihre Schulden) - genannt "kapital", den Jahreszinssatz als Dezimalzahl (beispielsweise 0,095) - genannt "zinssatz", die Zahl der Zeitpunkte in einem Jahr zu denen verzinst wird (normalerweise monatlich) - genannt "perioden" und die Anzahl an Jahren ab jetzt, die Sie berechnen wollen - genannt "jahre".
  2. Dividieren Sie Ihren "zinssatz" durch "perioden" (normalerweise 12). Wir nennen dieses Ergebnis "i".
  3. Nehmen Sie "perioden" und multiplizieren Sie es mit "jahre". Wir nennen dieses Ergebnis "n".
  4. Potenzieren Sie (1 + "i") mit dem Exponenten "n".
  5. Multiplizieren Sie das Ergebnis mit Ihrem "kapital". Dies ist der neue Saldo (oder die neuen Schulden).

Für dieses Beispiel brauchen Sie zwei Seitenvorlagen, zinsFormular und zinsDarstellung genannt, um die Informationen vom Benutzer abzufragen beziehungsweise sie darzustellen. Sie brauchen auch ein berechneZineseszins genanntes Python-basiertes Skript, das die tatsächliche Berechnung durchführt. Der erste Schritt ist, ein Web-Formular in zinsFormular zu erstellen, das "kapital", "zinssatz", "perioden" und "jahre" Ihrer Benutzer abfragt. Hier ist eine beispielhafte Seitenvorlage zinsFormular:

      
        

        

Bitte geben Sie die folgende Informationen ein:

Ihr aktueller Saldo (oder Schulden):
Ihr Jahreszinssatz:
Verzinsungsperioden pro Jahr:
Anzahl der Jahre:

Dieses Formular sammelt Informationen und ruft die Methode zinsDarstellung auf. Erstellen Sie jetzt ein berechneZineseszins genanntes Python-basiertes Skript, das die vier Parameter "kapital", "zinssatz", "perioden" und "jahre" aufnimmt, mit folgendem Python-Code:

      ## Script (Python) "berechneZineseszins"
      ## Parameter = kapital, zinssatz, perioden, jahre
      ##
      """
      Zinseszinsrechnung
      """
      i = zinssatz / perioden
      n = perioden * jahre
      return ((1 + i) ** n) * kapital
      

Geben Sie die Parameter in das Feld Parameters List und den Code in das Haupttextfeld ein. Die Kommentare die am Anfang des Codes stehen sind beim Bearbeiten über das Web nicht nötig. (Sie sind jedoch hilfsreich beim Bearbeiten von Skripten über FTP.)

Dies gibt den Saldo oder die Schulden zurück, der über Zeitraum "jahre" verzinst wurde. Erstellen Sie danach eine Seitenvorlage namens zinsDarstellung, die berechneZineseszins aufruft und das Ergebnis zurückgibt:

      
        

        

Ihr Gesamtsaldo (oder Ihre Gesamtschulden) einschließlich Zinseszins über 2 Jahre beträgt:

1,00

Rufen Sie zuerst die Seitenvorlage zinsFormular ab. Geben Sie jetzt einige Information über Ihren Saldo oder Ihre Schulden ein und klicken Sie auf Berechnen. Dies bewirkt, dass zinsFormular die gesammelten Informationen an zinsDarstellung schickt, das wiederum das Python-basierte Skript berechneZineseszins aufruft. Die Darstellungs-Methode verwendet den vom Skript zurückgegebenen Wert bei der entstehenden Darstellung.

Wie bereits früher erwähnt, sind die Möglichkeiten, Skripte zu verwenden, fast endlos. Dieses Beispiel gibt Ihnen jedoch einen guten Eindruck vom allgemeinsten Anwendungsmuster für Darstellungs-Objekte Informationen abzufragen und anzuzeigen und das Verwenden von Geschäftslogik-Objekten um Berechnungen durchzuführen.

Methoden verwenden

Methoden sind Objekte in Zope, die speziellen ausführbaren Inhalt enthalten. Das Wort "Methode" ist eigentlich die falschen Bezeichnung und seine Verwendung in Zope nimmt langsam ab zugunsten gebräuchlicherer Ausdrücke wie Skript und Vorlage.

Zope bietet zwei Arten von Methoden: DTML-Methoden und SQL-Methoden. DTML-Methoden werden verwendet, um Darstellungsvorlagen zu definieren, die auf Inhaltsobjekte wie DTML-Dokumente und Dateien angewendet werden können. Eine sehr häufige und beliebte Art, DTML-Methoden zu verwenden, ist das Definieren von Darstellungsvorlagen separat von Ihrem Inhalt.

SQL-Methoden werden verwendet, um Datenbankabfragen zu speichern, die Sie überall in Ihrer Webanwendung wieder verwenden können. SQL-Methoden werden in Kapitel 12 "Verbindung mit relationalen Datenbanken" erklärt, wo ein Beispiel für das Erstellen einer Webanwendung mit Hilfe einer relationalen Datenbank, gegeben wird.

Alle die verschiedenen Objekte in Zope können durch das Anwenden von Methoden auf diese Objekte verändert werden. Beispielsweise besitzen Ordner-Objekte eine objectValues-Methode die die im Ordner enthaltenen Objekte zurückgibt. DTML-Methoden können verwendet werden, um einfache Skripte zu schreiben, die diese Zope-API-Methoden aufrufen. Diese Methoden sind im Hilfesystem unter "API Documentation" dokumentiert.

Vor Zope 2.3 waren DTML-Methoden die einzige Art, Skripte mit Ihrem Web-Browser in Zope zu schreiben. Während DTML für sehr einfache Skripte und die Darstellung von Information mittels Vorlagen brauchbar ist, hatte dieser Ansatz viele Probleme, weil DTML nicht so flexibel wie andere Programmiersprachen ist.

Zope 2.3 führte zwei neue Arten von Skript-Objekten basierend auf zwei sehr beliebten Programmiersprachen, Python (in dem Zope geschrieben ist) und Perl ein. Sie sollten Python und Perl-basierte Skripte für komplexere Skripte verwenden, statt eine DTML-Methode zu schreiben. Während Sie durch die ältere Zope-Dokumentationen, Mailinglisten-Archive und andere Ressourcen auf Zope.org blättern, können Sie viele Verweise auf sehr komplexe DTML-Skripte finden, die vor den Python und Perl-basierten Skripte verwendet wurden. Im Allgemeinen sollten komplexe Skripte entweder in Python oder Perl geschrieben werden. Python und Perl-basierte Skripte werden später in diesem Kapitel beschrieben und in Kapitel 10 "Zope-Scripting für Fortgeschrittene" werden viele Beispiele für ihren Einsatz gegeben.

Ein einfaches Beispiel dafür, wie man DTML-Methoden verwendet, ist das Erstellen einer DTML-Methode Namens objektListe im Stammordner:

      

      

Wenn Sie diese Methode betrachten, ruft sie die objectValues-Methode im Stammordner auf und zeigt Ihnen eine einfache HTML-Liste aller der Objekte im Stammordner an, wie in Abbildung 3-7 gezeigt wird.

Ergebnisse der DTML-Methode objektListe

Abbildung 3-7 Ergebnisse der DTML-Methode objektListe

Alle Ordner implementieren die objectValues-Methode. Die objectValues-Methode ist Teil einer Schnittstelle namens ObjectManager, die alle Ordner implementieren.

Zusätzlich zur Anwendung von API-Methoden auf Objekte können DTML-Methoden auch auf eine bestimmten Art dazu verwendet werden, jedes Zope-Objekt zu erweitern. Dies wird im nächsten Kapitel detaillierter erklärt. Effektiv erlaubt Ihnen dies, das Zope-API zu erweitern, indem Sie einfach DTML-Methoden erzeugen.

Sie sahen gerade die objektListe-Methode, die sich im Stammordner befindet und eine einfache Liste des Stammordnerinhalts ausgibt. Weil die Methode im Stammordner ist, ist sie jetzt durch andere Objekte in oder unterhalb des Stammordners verwendbar. Diese Methode erweitert das Zope-API für diese Objekte, da es ihnen eine andere aufrufbare Methode liefert.

Um dies zu demonstrieren, lassen Sie uns einen Primaten genannten Unterordner erstellen und fügen Sie drei Dokumente, Affen, Menschenaffen, Menschen hinzu. Sie können die objektListe-Methode des Primaten-Ordners durch das Besuchen des URLs Primaten/objektListe aufrufen. Wie Sie sehen könne, unterscheidet sich die Auswirkung des Aufrufs der objektListe-Methode des Primaten-Ordners von der Auswirkung, es im Stammordner aufzurufen. Die objektListe-Methode ist im Stammordner definiert, aber wir verwenden sie hier, um den Inhalt des Primaten-Ordners anzuzeigen. Dieser Mechanismus, Objekte wieder zu verwenden, heißt Akquisition und wird in Kapitel 4 "Dynamische Inhalte mit DTML" näher erklärt.

DTML-Methoden dienen hauptsächlich als Darstellungsvorlagen. DTML-Methoden können als Vorlagen dienen, die wiederverwendbare Inhaltselemente zu dynamischen Web-Seiten zusammenfügen. Die Vorlagenfunktionalität von DTML-Methoden wird im nächsten Kapitel im Detail erörtert.

Vergleich zwischen DTML-Dokumenten und -Methoden

DTML-Methoden haben dieselbe Benutzerschnittstelle wie DTML-Dokumente, was Anfänger ein bisschen verwirren kann. Alle Vorgehensweisen, die Sie im letzten Kapitel für das Hinzufügen, das Bearbeiten, das Betrachten und das Hochladen von DTML-Dokumenten lernten, sind für DTML-Methoden identisch.

Eine Quelle für häufige Missverständnisse für Zope-Anfänger ist die Frage, wann man ein DTML-Dokument und wann eine DTML-Methode verwenden soll. Oberflächlich betrachtet scheinen diese zwei Möglichkeiten identisch. Beide enthalten DTML und anderen Inhalt, beide führen DTML-Code aus, und beide haben eine ähnliche Benutzerschnittstelle und ein ähnliches API. Was ist also der Unterschied?

DTML-Dokumente sind dazu gedacht, Dokument-ähnliche Inhalt zu speichern. Zum Beispiel könnten die verschiedenen Kapitel eines Buchs in einem DTML-Dokument gespeichert werden. Eine allgemeine Regel ist: wenn Ihr Inhalt hauptsächlich Dokument-orientiert sind und Sie ihn auf Ihrer Site darstellen wollen, dann sollte er in ein DTML-Dokument kommen.

DTML-Methoden sind dazu gedacht, andere Objekte zu verändern und darzustellen. DTML-Methoden speichern normalerweise nicht viel Inhalt, es sei denn, der Inhalt soll sich ändern oder anderen Inhalt manipulieren.

Machen Sie sich keine Sorgen, wenn Sie Ihnen die Unterschiede zwischen DTML-Dokument und -Methode immer noch unklar sind. Sogar die erfahrensten Zope-Programmierer müssen etwas überlegen, bevor sie entscheiden, welche Art von Objekt sie verwenden. In Kapitel 8 "Variablen und DTML für Fortgeschrittene" werden Sie etwas über die technischen Unterschiede zwischen DTML-Dokumenten und DTML-Methoden lernen (Sie suchen Variablen auf unterschiedliche Weise, weil Sie unterschiedliche "Client"-Objekte besitzen). Hier sind einige allgemeine Regeln, um Ihnen zu helfen, sich zwischen DTML-Dokumenten und -Methoden zu entscheiden:

  • Wenn es Inhalt ist, verwenden Sie ein DTML-Dokument oder eine Datei wenn Sie keinerlei DTML-Scripting benötigen.
  • Wenn es einfache Logik ist, verwenden Sie eine DTML-Methode.
  • Wenn es von anderen Objekten dargestellt werden soll, verwenden Sie ein DTML-Dokument.
  • Wenn es andere Objekte darstellen soll, verwenden Sie eine DTML-Methode.
  • Wenn es komplexes Verhalten ist, verwenden Sie ein Python- oder Perl-basiertes Skript.

Wie Sie gesehen haben, sind DTML-Methoden ein hilfreiches Werkzeug für Darstellung und einfache Programmierung, aber vielleicht werden Sie die Leistungsfähigkeit einer Programmiersprache mit vollem Funktionsumfang wollen und hier kommen schließlich die Skripte ins Spiel.

Sitzungen verwenden

Sitzungen (Sessions) erlauben es, die Übersicht über Site-Beuscher zu behalten. Web-Browser benutzen ein Protokoll namens HTTP um Daten mit einem Server wie Zope auszutauschen. HTTP bietet einem Server keine Möglichkeit die Übersicht über die Anfragen eines Benutzers zu behalten. Jede Anfrage wird völlig unabhängig von anderen betrachtet.

Sitzungen überwinden diese Einschränkung von HTTP. Der Begriff "Sitzung" bezeichnet eine Reihe von zusammengehörenden HTTP-Anfragen, die von demselben Client während eines bestimmten Zeitraums kommen. Zopes Sitzungssystem benützt Cookies und/oder HTTP-Formular-Elemente "im Hintergrund", um die Sitzungen eines Benutzer zu verfolgen. Mit Zopes Sitzungssystem können Sie das manuelle Verwalten von Benutzersitzungen vermeiden.

Sie können Sitzungen dazu verwenden, anonyme Benutzer zu verfolgen, wie auch diejenigen die Konten zur Zope-Anmeldung besitzen.

Daten die mit einer Sitzung verknüpt sind nennt man "Sitzungsdaten" (Session Data). Sitzungsdaten sind nur für die Dauer eines Site-Besuchs gültig, die über eine einstellbare Zeitschwelle festgelegt wird, in der ein Benutzer nicht aktiv ist. Sitzungsdaten werden dazu verwendet Informationen über den Besuch eines Benutzers zu speichern, wie die Artikel die ein Benutzer in einen "Einkaufskorb" legt oder welche Seiten ein Benutzer während seines Besuchs auf Ihrer Site aufgerufen hat.

Es ist wichtig, dass man sich bewusst darüber wird, dass das Speichern von sensiblen Informationen in Sitzungsdaten potenziell unsicher ist, wenn die Verbindung zwischen Browsern und Zope nicht in irgend einer Weise verschlüsselt ist. Speichern Sie keine sensiblen Daten wie Telefonnummern, Adressen, Kontonummern, Kreditkartennummern oder andere persönliche Informationen über Ihre Site-Besucher, solange Sie die Verbindung zwischen Zope und den Site-Besuchern nicht mit SSL abgesichert haben.

Sitzungs-Konfiguration

Zope-Versionen nach 2.5 bieten standardmäßig eine vorgefertigte Sitzungsumgebung, das bereits startfähig konfiguriert ist. Es besteht also kein Anlass diese Objekte zu ändern, solange Sie nicht neugierig sind oder die Sitzungseinstellungen verändern möchten. Benutzen Sie das Hilfesystem um Informationen darüber zu erhalten, wie Sie die Einstellungen ändern können.

Zope verwendet mehrere verschiedene Arten von Objeken um Sitzungsdaten zu verwalten. Hier folgen kurze Beschreibungen für ihre Verwendungszwecke.

Browser ID Manager (Browserkennungs-Verwaltung)
Dieses Objekt verwaltet die Art und Weise, wie die Browser der Benutzer von Anfrage zu Anfrage identifiziert werden und erlaubt es Ihnen einzustellen, ob dies mit Hilfe von Cookies oder Formularvarialben oder einer Kombination aus beiden geschehen soll. Die standardmäßige Sitzungskonfiguration stellt eine Browserkennungs-Verwaltung als Objekt namens /browser_id_manager bereit.
Transient Object Container (Behälter für flüchtige Objekte)
Dieses Objekt speichert Sitzungsdaten. Es erlaubt Ihnen festzulegen, wie lange Sitzungsdaten erhalten bleiben bevor sie ungültig werden. Die standardmäßige Sitzungskonfiguration stellt einen Behälter für flüchtige Objekte Namens /temp_folder/session_data bereit. Die Sitzungsdaten-Objekte im Standardbehälter für flüchtige Objekte session_data gehen bei jedem Neustart von Zope verloren.
Session Data Manager (Sitzungsdaten-Verwaltung)
Dieses Objekt verbindet die Browserkennungs- und Sitzungsdaten-Informationen. Wird ein Ordner der Sitzungsdaten enthält durchlaufen, wird das REQUEST-Objekt mit SESSION bestückt, einem Sitzungsdaten-Objekt. Die standardmäßige Sitzungskonfiguration stellt eine Sitzungsdaten-Verwaltung Namens /session_data_manager.

Sitzungsdaten verwenden

Sie werden auf Sitzungsdaten typischerweise über das Attribut SESSION im REQUEST-Objekt zugreifen.

Hier ist ein Beispiel, wie man durch Verwendung eines python-basierten Skripts mit einer Sitzung arbeitet:

        ## Script (Python) "letzterAufruf"
        sek_pro_tag=24*60*60
        sitzung=context.REQUEST.SESSION
        if sitzung.has_key('letzter Aufruf'):
            # Das Skript wurde bereits aufgerufen, da 'letzter Aufruf'
            # vorher schon einmal in der Sitzung gesetzt wurde.
            vorher=sitzung['letzter Aufruf']
            jetzt=context.ZopeTime()
            sitzung['letzter Aufruf']=jetzt # letzten Aufruf auf jetztige Zeit setzen
            return 'Sekunden seit letztem Aufruf %.2f' % ((jetzt - vorher) * sek_pro_tag)
        # Das Skript wurde vorher noch nie Aufgerufen, weil 'letzter Aufruf
        # in den Sitzungsdaten nicht existiert. 
        sitzung['letzter Aufruf']=context.ZopeTime()
        return 'Dies ist Ihr erster Aufruf'

Rufen Sie dieses Skript ab und laden Sie es mehrmals neu. Es weiß darüber Bescheid, wann Sie das Skript zuletzt abgerufen haben und berechnet die Zeit zwischen den Aufrufen. Wenn Sie Ihren Browser beenden und das Skript wieder aufrufen, hat es Sie vergessen. Wenn Sie jedoch einfach ein paar andere Seiten besuchen und wieder zurückkehren, weiß es den Zeitpunkt Ihres letzten Aufrufs immer noch.

Dieses Beispiel zeigt die grundlegenden Funktionen für das Arbeiten mit Sitzungsdaten: Sitzungsdaten-Objekte verhalten sich genau wie Python-Dictionaries. Sie werden fast immer Sitzungsdaten verwenden, die aus normalen Python-Listen, Dictionaries, Zeichenketten und Zahlen bestehen. Das einzig knifflige an Sitzungen ist, dass wenn Sie mit veränderbaren Sitzungsdaten (wie zum Beispiel Dictionaries oder Listen) arbeiten, Sie die Sitzungsdaten durch erneutes Zuweisen speichern müssen. Hier ist ein Beispiel:

        ## Script (Python) "sitzungsBeispiel"
        sitzung=context.REQUEST.SESSION
        # l ist eine Liste
        l=sitzung['meineListe']
        l.append('Spam')
        # Wenn Sie hier auhören, werden Ihre Änderungen an der Liste
        # nicht gespeichert. Sie müssen die Sitzungsdaten speichern indem 
        # Sie sie der Sitzung erneut zuweisen.
        sitzung['meineListe']=l

Weitere Informationen über Persistenz und veränderbare Daten finden Sie im Zope Developer's Guide.

Sie können Sitzung auch in Seitenvorlagen und DTML-Dokumenten verwenden. Hier beipielsweise ein Code-Stück aus einer Vorlage, das die Lieblingsfarbe des Benutzers darstellt (wie sie in der Sitzung gespeichert ist):

        

Blau

Hier das gleiche, nur in DTML:

        
          

Sitzungen haben eine Fülle von zusätzlichen Konfigurationsparametern und Anwendungsfällen. Für weitere Informationen über die Anwendungsprogrammierschnittstelle von Sitzungen, sehen Sie im Zope-Hilfesystem nach. Für ein weiteres Beispiel für die Verwendung von Sitzungen, sehen Sie sich das "Shopping Cart"-Beispiel an, das zusammen mit Zope 2.5 und höheren Version geliefert wird (im Examples-Ordner).

Versionen verwenden

Versionsobjekte helfen, die Arbeit mehrerer Leute an denselben Objekten zu koordinieren. Während Sie ein Dokument bearbeiten, kann jemand anderes zur selben Zeit ein anderes Dokument bearbeiten. In einer großen Zope-Site können Hunderte oder sogar Tausende von Menschen Zope gleichzeitig verwenden. Den Großteil der Zeit funktioniert dies gut, aber es können Probleme auftreten. Zum Beispiel könnten zwei Leute zu derselben Zeit dasselbe Dokument bearbeiten. Wenn die erste Person ihre Änderungen abschließt, werden sie in Zope gesichert. Wenn die zweite Person ihr Änderungen abschließt überschreibt sie die Änderungen der ersten Person. Sie können dieses Problem immer durch und Verwenden der Undo- und History-Funktionen umgehen, aber es kann immer noch ein Problem sein. Um dieses Problem zu beheben, hat Zope Version-Objekte.

Ein anderes Problem auf das Sie stoßen können, ist, dass Sie zwar einige Änderungen vornehmen möchten, aber Sie möchten sie nicht öffentlich machen bis Sie fertig sind. Nehmen wir beispielsweise an, dass Sie die Menüstruktur Ihrer Site ändern wollen. Sie wollen nicht an diesen Änderungen arbeiten, während Leute Ihre Site verwenden, weil es das Navigationssystem zeitweilig zerstören kann, während Sie daran arbeiten.

Versionen sind eine Möglichkeit, nicht-öffentliche Änderungen in Zope vorzunehmen. Sie können Änderungen an vielen verschiedenen Dokumenten vornehmen, ohne dass andere Leute sie sehen. Wenn Sie entscheiden, dass Sie fertig sind, können Sie Ihre Änderungen öffentlich machen oder sie verwerfen. Sie können in einer Version arbeiten solange Sie wollen. Zum Beispiel kann es Sie eine Woche kosten, Ihrem neues Menüsystem den letzten Schliff zu geben. Sobald Sie fertig sind, können Sie all Ihre Änderungen auf einmal zu veröffentlichen, indem Sie die Version freigeben.

Erstellen Sie eine Version durch das Wählen von "Version" in der Produktauswahlliste. Sie sollten zu einem Erstellformular kommen. Geben Sie Ihrer Version die Id MeineAenderungen und klicken Sie auf die Schaltfläche Add. Jetzt haben Sie eine Version erstellt, verwenden sie jedoch noch nicht. Um Ihren Version zu verwenden klicken Sie auf sie. Sie sollten zur Ansicht Join/Leave Ihrer Version kommen, wie in Abbildung 3-8 gezeigt.

Anmelden an einer Version

Abbildung 3-8 Anmelden an einer Version

Die Version teilt Ihnen mit, dass Sie sie gegenwärtig nicht verwenden. Klicken Sie auf die Schaltfläche Start Working in MeineAenderungen. Jetzt sollte Zope Ihnen sagen, dass Sie in einer Version arbeiten. Kehren Sie jetzt zum Stammordner zurück. Achten Sie darauf, dass Sie überall wohin Sie gehen eine kleine Nachricht am oberen Fensterrand erscheint, die sagt You are currently working in version /MeineAenderungen. Diese Nachricht lässt Sie wissen, dass Änderungen, die Sie an dieser Stelle vornehmen, nicht öffentlich sein werden, aber in Ihrer Version gespeichert werden. Erstellen Sie zum Beispiel ein DTML-Dokument namens neu. Wie Sie merken, hat es eine kleine rote Raute nach seiner Kennung. Bearbeiten Sie jetzt Ihre standard_html_header-Methode. Fügen Sie ihr eine Zeile hinzu wie etwa:

      
        
          <dtml-var title_or_id></dtml-var>
        
        
        

In einer Version geändert

Jedes Objekt, das Sie erstellen oder bearbeiten, während Sie in einer Version arbeiten, wird mit einer roten Raute markiert werden Kehren Sie jetzt zu Ihrer Version zurück und klicken Sie auf die Schaltfläche Quit working in MeineAenderungen. Versuchen Sie jetzt zum Dokument neu zurückzukehren. Achten Sie darauf, dass das Dokument, das Sie während Sie in Ihrer Version waren erstellt haben, jetzt verschwunden ist. Andere Änderungen, die Sie in der Version vorgenommen haben, sind auch verschwunden. Wie Sie merken, hat Ihre standard_html_header-Methode jetzt eine kleine rote Raute und ein nachfolgendes Sperrsymbol. Dies zeigt, dass dieses Objekt in einer Version geändert worden ist. Wird Objekt in einer Version zu ändern, wird es gesperrt es, sodass es niemand anderes mehr ändern kann, bis Sie die Änderungen die Sie in Ihrer Version vorgenommen haben bestätigen oder verwerfen. Die Sperrung stellt sicher, dass Ihre Versionsänderungen keine Änderungen überschreiben, die andere Leute vornehmen, während Sie in einer Version arbeiten. Wenn Sie sich zum Beispiel vergewissern wollen, dass nur Sie zu einer bestimmten Zeit an einem Objekt arbeiten, so können Sie es in einer Version ändern. Die Sperrung schützt Sie sich nicht nur vor unerwarteten Änderungen, sie macht auch die Sache auch unbequem, wenn Sie etwas bearbeiten wollen, das gerade von jemand anderem gesperrt ist. Es ist sinnvoll, die Verwendung von Versionen einzuschränken, um das Auszusperren anderer Leute beim Vornehmen von Änderungen an Objekten zu vermeiden.

Kehren Sie jetzt zu Ihrer Version dadurch zurück, indem Sie den auf sie und dann auf die Schaltfläche Start working in MeineAenderungen klicken. Achten Sie darauf, dass alles in den Zustand zurückkehrt, wie es war, bevor Sie die Version verließen. Lassen Sie uns an dieser Stelle Ihre Änderungen dauerhaft machen. Gehen Sie zur Ansicht Save/Discard, wie in Abbildung 3-9 gezeigt.

Versionsänderungen freigeben.

Abbildung 3-9 Versionsänderungen freigeben.

Geben Sie einen Kommentar wie Dies ist ein Test in das Eingabefeld Comment ein und klicken Sie auf die Schaltfläche Save. Ihre Änderungen sind jetzt öffentlich und alle Objekte, die Sie in Ihrer Version geändert haben, sind jetzt nicht mehr gesperrt. Achten Sie darauf, dass Sie immer noch in Ihrer Version arbeiten. Gehen Sie zur Ansicht Join/Leave und klicken Sie auf die Schaltfläche Quit Working in MeineAenderungen. Stellen Sie jetzt sicher, dass das Dokument, das Sie in Ihrer Version erstellt haben, sichtbar ist. Ihre Änderung am standard_html_header sollte auch sichtbar sein. Wie überall in Zope, können Sie diese Änderungen rückgängig machen, wenn Sie wollen. Gehen Sie zur Ansicht Undo. Wie Sie bemerken, haben Sie statt vieler Transaktionen - einer für jede Änderung - nur eine Transaktion für alle, die Änderungen haben, die Sie in Ihrer Version vorgenommen haben. Wenn Sie die Transaktion widerrufen, werden alle in der Version vorgenommenen Änderungen rückgängig gemacht.

Versionen sind ein leistungsfähiges Werkzeug für die Zusammenarbeit in Teams. Sie müssen keine Live- und Test-Server laufen lassen, da Versionen es Ihnen erlauben Experimente durchzuführen, sie zu beurteilen und sie dann zu öffentlich machen, wenn Sie entscheiden, dass alles in Ordnung ist. Sie sind nicht darauf beschränkt nur in einer Version zu arbeiten. Viele Leute können in derselben Version arbeiten. Auf diese Weise können Sie über Version zusammenarbeiten, während sie die Änderungen vor der allgemeinen Öffentlichkeit verborgen halten.

Versionen und ZCatalog

Versionen arbeiten nicht gut mit ZCatalog zusammen. Der Grund dafür ist, dass Versionen Objekte sperren sobald diese in einer Version bearbeitet werden, um Änderungen außerhalb einer Version zu verhindern. Dies funktioniert gut wenn Änderungen isoliert sind.

ZCatalog verknüpft auf bestimmte Weise die Veränderungen von ungleichen Objekten. Dies passiert, weil das katalogisieren eines Objekts notwendigerweise den Catalog ändern muss. Objekte die sich selbst katalogisieren wenn sie verändert werden geben ihre Änderungen an den Catalog weiter. Wenn solch ein Objekt in einer Version geändert wird, wird auch der Catalog in der Version geändert, wodurch der Catalog gesperrt wird. Durch diese Eigenschaft lassen sich Catalog und Versionen schlecht miteinander verwenden. In der Regel sollten Versionen nicht in Anwendungen eingesetzt werden die einen Catalog verwenden.

Pufferung zur Leistungssteigerung

Ein Cache ist ein temporärer Ort, um Informationen zu speichern, auf die häufig zugriffen wird. Der Grund für das Verwenden eines Caches ist die Geschwindigkeit. Jede Art von dynamischem Inhalt wie eine DTML-Seite oder ein Python-Skript muss jedes Mal ausgewertet werden, wenn es aufgerufen wird. Für einfache Seiten oder schnelle Skripte ist dies normalerweise kein Problem. Bei sehr komplexen DTML-Seiten oder Skripten, die viele Berechnungen ausführen oder entfernte Server aufrufen kann der Zugriff auf diese Seite oder dieses Skript mehr als nur ein triviales Maß an Zeit beanspruchen. Sowohl DTML als auch Python können so komplex werden, besonders wenn Sie viele Schleifen verwenden (wie das in-Tag oder die for-Schleife in Python), oder wenn Sie viele Skripte aufrufen, die wiederum viele Skripte aufrufen usw. Verarbeitungen, die viel Zeit benötigen, werden rechenintensiv genannt.

Durch Speichern des Ergebnisses nach einem einzelnen Aufruf einer rechenintensiven Seite oder eines rechenintensiven Skripts kann ein Cache durch eine spätere Wiederverwendung dieses Aufrufs die Geschwindigkeit Ihrer Site stark erhöhen. Die aller erste Person die diese Seite aufruft erhält die übliche lange Antwortzeit, aber sobald der Wert der Berechnung im Cache gespeichert ist, werden alle folgenden Benutzer die die Seite betrachten werden eine sehr kurze Antwortzeit bemerken weil sie die gepufferte Kopie des Ergebnisses bekommen und nicht wieder die selbe rechenintensive Verarbeitung durchlaufen, die der erste Benutzer durchlief.

Um Ihnen eine Vorstellung davon zu geben, wie Caches Ihre Site-Geschwindigkeit verbessern können, stellen Sie sich vor Sie erstellen www.zopezoo.org und die aller erste Seite Ihrer Site ist sehr komplex. Lassen Sie uns annehmen, dass diese Seite komplexe Kopf- und Fußzeilen hat, mehrere verschiedene Datenbanktabellen abfrägt und mehrere spezielle Skripte auf komplexe Weise aufruft, die die Ergebnisse der Datenbankabfragen auf komplexe Weise verarbeiten. Jedes Mal, wenn ein Benutzer zu www.zopezoo.org kommt, muss Zope diese sehr aufwendige Seite wiedergeben. Lassen Sie uns für Demonstrationszwecke annehmen, dass diese Berechnung dieser komplexen Seite eine halbe Sekunde oder 500 Millisekunden in Anspruch nimmt.

Angenommen es dauert eine halbe Sekunde, um diese fiktionale komplexe Hauptseite wiederzugeben, dann kann Ihr Rechner nur 120 Anfragen pro Minute bearbeiten. In Wirklichkeit wäre diese Zahl wahrscheinlich noch niedriger, weil Zope zusätzlich noch andere Dinge zu tun hat als diese Hauptseite bereitzustellen. Stellen Sie sich jetzt vor, dass Sie diese so einrichten, dass sie gepuffert wird. Da nichts von der rechenintensiven Verarbeitung geleistet werden muss, um die zwischengespeicherte Kopie der Seite anzuzeigen, könnten noch viel mehr Benutzer die Hauptseite betrachten. Wenn es beispielsweise 10 Millisekunden dauert, um eine zwischengespeicherte Seite anzuzeigen, dann wird diese Seite Ihren Webseite-Besuchern 50 mal schneller zur Verfügung gestellt. Die tatsächliche Leistung des Caches und von Zope hängt stark von Ihrem Computer und Ihrer Anwendung ab, aber dieses Beispiel gibt Ihnen eine Vorstellung davon, wie Pufferung Ihre Web-Site ziemlich stark beschleunigen kann. Es gibt jedoch einige Nachteile beim Puffern:

Cache-Lebensdauer
Wenn Seiten lange zwischengespeichert werden, könnten sie die aktuellste Information über Ihre Site nicht wiedergeben. Wenn Sie Informationen haben, die sich sehr schnell ändern, kann das Puffern Ihren Benutzern die neue Information vorenthalten, weil die zwischengespeicherte Kopie die alten Informationen enthält. Wie lange ein Ergebnis zwischengespeichert bleibt wird Cache-Lebensdauer der Information genannt.
Persönliche Informationen
Viele Web-Seiten können für einen speziellen Benutzer personalisiert werden. Diese Informationen zwischenzuspeichern und sie einem anderen Benutzer zu zeigen, wäre aufgrund von Vertraulichkeitsaspekten offensichtlich schlecht und auch weil der andere Benutzer keine Information über sich sondern über jemand anderen bekommen würde. Deshalb wird personalisierte Information fast nie gepuffert.

Zope erlaubt Ihnen, diese Probleme durch das Einrichten einer Cache-Richtlinie zu umgehen. Die Cache-Richtlinie erlaubt Ihnen, zu kontrollieren, wie Inhalte zwischengespeichert werden. Cache-Richtlinien werden von Cache-Manager-Objekten verwaltet.

Einen Cache-Manager hinzufügen

Cache-Manager können genau wie jedes andere Zope-Objekt hinzugefügt werden. Gegenwärtig bietet Zope zwei Arten von Cache-Managern:

HTTP Accelerated Cache Manager
Ein HTTP Accelerated Cache Manager erlaubt Ihnen, einen HTTP-Cache-Server zu steuern, der extern zu Zope läuft, zum Beispiel Squid. HTTP Accelerated Cache Manager machen das Puffern nicht selbst, aber sie setzen spezielle HTTP-Header, die einem externen Cache-Server sagen, was zwischenzuspeichern ist. Einen externen Cache-Server wie Squid einzurichten geht über den Rahmen dieses Buchs hinaus. Für nähere Details sehen Sie auf der Squid-Site nach.
(RAM) Cache Manager
Ein RAM Cache Manager ist ein Zope-Cache-Manager, der den Inhalt von Objekten in Ihrem Computerspeicher puffert. Dies macht ihn sehr schnell, bewirkt aber auch, dass Zope mehr Speicher Ihres Computers verbraucht. Ein RAM Cache Manager erfordert um zu funktionieren keine externen Ressourcen wie ein Squid-Server.

Erstellen Sie für die Zwecke dieses Beispiels einen RAM Cache Manager Namens CacheManager im Stammordner. Dies wird das Cache-Manager-Objekt für Ihre ganze Site sein.

Jetzt können Sie auf CacheManager klicken und seinen Konfigurationsbildschirm betrachten. Es gibt mehrere Elemente auf diesem Bildschirm:

Title
Der Titel des Cache-Managers. Dieser ist optional.
REQUEST-Variablen
Diese Information wird verwendet, um die zwischengespeicherte Kopie einer Seite zu speichern. Dies ist ein fortgeschrittenes Merkmal, zunächst können Sie es nur auf "AUTHENTICATED_USER" gestellt lassen.
Threshold Entries (Schwellwert für Einträge)
Die Anzahl von Objekten, die der Cache-Manager gleichzeitig puffern wird.
Cleanup Interval (Aufräumintervall)
Die Lebensdauer von gepufferten Ergebnissen.

Lassen Sie zunächst alle diese Einträge wie sie sind, es sind gute, vernünftige Standardwerte. Das ist bereits alles, was man tun muss, um einen Cache-Manager einzurichten!

Es gibt ein Paar weitere Ansichten in einem Cache-Manager, die Sie vielleicht nützlich finden werden. Das erste ist die Ansicht Statistics. Diese Ansicht zeigt Ihnen die Anzahl von Treffern ("Hits") und Fehlschlägen ("Misses") im Cache an, um Ihnen zu zeigen, wie wirkungsvoll Ihre Pufferung ist.

Es gibt auch eine Ansicht namens Associate, die Ihnen erlaubt, einen bestimmten Typ oder Typen von Zope-Objekten mit einem speziellen Cache-Manager zu verknüpfen. Zum Beispiel kann es sein, dass Sie möchten, dass Ihr Cache-Manager nur DTML-Dokumente puffert. Sie können diese Einstellungen in der Ansicht Associate ändern.

An dieser Stelle wird noch nichts zwischengespeichert, Sie haben nur einen Cache-Manager erstellt. Der nächste Abschnitt erklärt, wie Sie den Inhalt tatsächlicher Dokumente puffern können.

Ein Dokument puffern

Ein Dokument zu puffern ist sehr leicht. Bevor Sie ein Dokument puffern können müssen Sie zuerst einen Cache-Manager haben, wie den, den Sie im vorherigen Abschnitt erstellt haben.

Um ein Dokument zu puffern, erstellen Sie ein neues DTML-Dokument-Objekt im Stammordner namens Wetter. Dieses Objekt enthält eine Wetterinformation. Lassen Sie uns zum Beispiel sagen, es enthält:

        

          

Gestern hat es geregnet.

Klicken Sie jetzt auf das Wetter-DTML-Dokument und auf seine Cache-Ansicht. Diese Ansicht lässt Sie dieses Dokument mit einem Cache-Manager verknüpfen. Wenn Sie sich im Listenfeld nach unten bewegen, sehen Sie den Cache-Manager CacheManager, den Sie im vorherigen Abschnitt erstellten. Wählen Sie diesen als Cache-Manager für Wetter aus.

Jedes Mal wenn jetzt irgend jemand das Wetter-Dokument besucht, bekommt er stattdessen die gepufferte Kopie. Für ein so triviales Dokument wie unser Wetter-Beispiel hat dies nicht viel Nutzen. Aber stellen Sie sich einmal vor, Wetter würde einige Datenbankabfragen enthalten. Zum Beispiel:

        

          

Das gestrige Wetter war

Die aktuelle Temperatur beträgt

Lassen Sie uns annehmen, dass gesternAbrage und aktuelleTempAbfrage SQL-Methoden sind, die eine Datenbank für die gestrige Vorhersage beziehungsweise die aktuelle Temperatur abfragen (für weitere Informationen über SQL-Methoden sehen Sie in Kapitel 12 "Verbindung an relationale Datenbanken" nach). Lassen Sie uns auch annehmen, dass sich die Information in der Datenbank nur einmal jede Stunde ändert.

Jetzt würde das Wetter-Dokument ohne zwischenzuspeichern die Datenbank jedes Mal abfragen, wenn es abgerufen würde. Wenn das Wetter-Dokument Hunderte Male in einer Stunde abgerufen werden würde, dann würden all jene Hunderte von Abfragen immer dieselbe Information enthalten.

Wenn Sie festlegen, dass das Dokument jedoch gepuffert werden soll, dann führt das Dokument die Abfrage nur durch, wenn der Cache erlischt. Die Standardcachezeit ist 300 Sekunden (5 Minuten), was Ihnen 91 % Ihrer Datenbankabfragen erspart, wenn Sie das Dokument puffern lassen, weil sie nur noch ein Zwölftel so oft abfragen. Es gibt einen Nachteil dieser Methode: Es existiert eine Chance, dass es sein kann, dass die Daten fünf Minuten veraltet sind, aber dies ist normalerweise ein akzeptabler Kompromiss.

Für weitere Informationen über das Puffern und das Verwenden der fortgeschritteneren Cache-Optionen sehen sie im Zope Administrator's Guide nach.

Virtual-Hosting-Objekte

Zope bietet drei Objekte, die Ihnen helfen, virtuelle Hosts einzurichten: SiteRoot, Set Access Rule und Virtual Host Monster. Virtuelles Hosting ist ein Weg viele Web-Sites mit einem Zope Server zu betreuen. Virtuelles Hosting ist eine fortgeschrittene Verwaltungsfunktion, die über den Rahmen dieses Buchs hinausgeht. Sehen im Zope Administrator's Guide für weitere Informationen über das virtuelle Hosting nach.

Mit MailHost Mails verschicken

Zope kommt zusammen mit einem Objekt, das dazu verwendet wird E-Mails abzuschicken, normalerweise in Verbindung mit dem DTML-Tag sendmail, das in Kapitel 8 "Variablen und DTML für Fortgeschrittene" weiter beschrieben wird.

MailHosts können sowohl von Python als auch von DTML aus dazu benutzt werden, eine E-Mail-Nachicht über das Internet zu verschicken. Sie sind nützlich als Gateways zur Welt. Jedes MailHost-Objekt ist mit einem Mail-Server verknüpft. Beipsielsweise kann man MailHost-Objekt mit ihrmail.ihredomain.com verknüpfen, der ihr SMTP-Mail-Server für ausgehende Nachricht wäre. Sobald Sie einen Server mit einem MailHost-Objekt verknüpfen, verwendet das MailHost-Objekt immer diesen Server um Mails zu senden.

Um ein MailHost-Objekt zu erstellen, wählen Sie MailHost aus der Produktauswahlliste. Wie Sie sehen können ist die Standard-Id "MailHost" und der Standard-SMTP-Server und der Port sind "localhost" und "25". Stellen Sie sicher, dass entweder auf Ihrem eigenen Rechner (localhost) ein Mail-Server läuft oder ändern Sie "localhost" in den Namen Ihres SMTP-Servers für ausgehende Nachrichten.

Jetzt können Sie das neue MailHost-Objekt von einem DTML-sendmail-Tag aus verwenden. Dies wird in Kapitel 8 "Variablen und DTML für Fortgeschrittene" ausführlich beschrieben. Die API für MailHost-Objekte erlaubt Ihnen Mails von Python-Skripten aus zu verschicken. Sehen Sie im Online-Hilfesystem für weitere Informationen nach.