Mit ZMS-2.11.0 fällt die software-technische Unterscheidung zwischen ZMS-Standard-Objekten (meta_type) und den benutzerdefinierten Speziellen Objekten (meta_type='ZMSCustom' and meta_id) endgültig weg. Das Objekt-Modell wird komplett homogenisiert (meta_id) und von einer eigenen Komponente (Objekt-Modell-Provider) bereitgestellt. Diese Komponente kann man bei Bedarf durch eine eigene Implementierung austauschen.

Screenshot

Modell der ZMS-Standard-Objekte: Mit Version 2.11 können Sie einen tieferen Einblick in ZMS nehmen und die Standard-Einstellungen modifizieren. Die Check-Box vom dem Namen der Content-Objektklasse ermöglicht die generelle Aktivierung oder Deaktivierung der Klasse. In der Detailsicht (s. hier Vollbild/Lupe) lässt sich die Content-Objektklasse den vorhandenen Redaktions-Rollen und Knoten zuweisen. Auf diese kann man bestimmte Content-Typen auf bestimmte Redakteure und/oder Rubriken beschränken.

 

Die Abbildung der ZMS Standard-Objekte im offenen Objekt-Modell (sogenannte "Spezielle Objekte") hat es notwendig gemacht, dieses um weitere Funktionen aus dem ZMS Standard zu erweitern. Nun ist es noch einfacher möglich, ZMS-artige eigene Objekte (z.B. analog Ordnern/Dokumenten) zu erstellen. Weiterhin verhalten sich die Richtext-Attribute nun in allen Objekten gleichartig und haben einen Umschalter auf die Standard-Ansicht. Möchte man für bestimmte Attribute eigene Editoren schreiben (vgl. z.B. Farb-Definitionen in Teaser-Containern), so kann man weiterhin Interface-Attribute verwenden und darauffolgende Attribute unsichtbar machen.
Das neue Tabellen-Objekt liefert ein schönes Beispiel für JS-basiertes XML-Editing: die Tabelle wird nicht mehr bei jedem Hinzufügen oder Löschen einer Spalte/Zeile in die Datenbank geschrieben sondern komplett im Browser editiert. Erst beim Speichern wird dann ZMS-konformes XML generiert und persistiert.

Konsequenz für die Content-Modellierung

Da Meta-Attribute nun nicht mehr exklusiv an die Standard-Objekte gebunden sind und ZMS ein einheitliches Konstruktionsmodell für Content-Objekte anbietet, liegt es nahe, die Meta-Attribute zu einem jeweils eigenen, zusätzlichen Elementtyp zu abstrahieren. Auf diese Weise kann man ein einmal definiertes Meta-Attribut für alle Content-Objektklassen assoziierbar machen und zudem auch die Sequenz des Elements für das Eingabe-Interface analog allen anderen Datentypen frei bestimmen (siehe folgende Screenshots).
Nun kann man den Datentyp des Elementtyps zentral ändern (z.B. DC.Description von Text nach String) und dies gilt dann automatisch in allen Content-Objekten (zuvor war eine generalisierte Elementtyp-Änderung in Speziellen Objekten für die primär aus primitiven Elementtypen konstruierten 'Meta-Attribute' nicht so einfach möglich).

defMetaAttr_pre_ger.jpg

Das Konfigurations-Menü für Meta-Attribute ist simpler geworden: Die in ZMS 2.10 noch verfügbare Objektklassen-Assoziation ist nun nicht mehr erforderlich ...

contentObj_defMetaAttr_pre_ger.jpg

... weil die Deklaration der Meta-Attribute nun explizit über die Daten-Definitionen im Konfiguartions-Menü 'Content-Objekte' erfolgt.

Performance

Im ZMS-nativen Code konnte die Unterscheidung zwischen Standard-Objekten (meta_type) und speziellen Objekten (meta_type/meta_id) entfernt werden. Dadurch war es zum einen möglich, sehr viel Code einzusparen und Redundanzen zu vermeiden. Zum anderen wurde der Code performanter. Insbesondere bei aktiviertem Workflow konnten grundlegende Funktionen performanter und klarer formuliert werden. Der Performance-Gewinn lag bei verschiedenen Vergleichs-Tests durchweg im Rahmen von 20-50%.

API Documentation

Screenshot

ZMS-2.11 enthält nun auch einen komplett integrierten API-Browser für Web-Entwickler. Damit lassen sich alle ZMS-Funktionen komfortabel in der jeweils aktuellsten API-Dokumentation nachschlagen.

Interaktive Sitemap

interactiveDelete_pre_ger.png

Mit der ajax-basierten interaktiven Sitemap lässt sich eine Re-Strukturierung des Content-Baums durchführen: ein Klick auf das Icon bzw. Ziehen ermöglicht das Verschieben des aktiven Knotens in einen anderen (Drag'n Drop). Das Ziehen auf das Mülleimer-Icon löscht das entsprechende Objekt des Baum.

Relevante Code-Änderungen: Changes

WICHTIG: Ein Downgrade des Dokumentbaums von ZMS 2.11 nach 2.10 ist nicht mehr möglich; führen Sie daher Ihr Update unbedingt zunächst auf einem Testsystem in Kopie durch.

Leider gibt es den Fortschritt nicht ganz umsonst: die ZMS-API ist zwar weitestgehend gleich geblieben, allerdings muss man doch einige Änderungen an den eigenen Darstellungs-Templates und Funktionen durchführen, damit das neue Release reibungslos läuft:

  • meta_type_or_id():
    Die Funktion meta_type_or_id() wurde aus der ZMS-API entfernt. Alle Vorkommnisse von meta_type=='ZMS...' müssen durch meta_id=='ZMS...' sowie von meta_type=='ZMSCustom' and meta_id=='...' sollten durch meta_id=='...' ersetzt werden
  • filteredChildNodes() in Textabschnitten:
    Die Funktion filteredChildNodes() wird von ZMSContainerObject implementiert. ZMSTextareas waren bisher von ZMSObject abgeleitet, sind nun von aber vom Typ ZMSCustom. Per Akquisition/Vererbung hat der Aufruf von filteredChildNodes() in Textabschnitten bisher immer die Funktion des übergeordneten Containers aufgerufen und dessen Kinder gelistet. Um dies zu erreichen muss man nun getParentNode().filteredChildNodes() verwenden.
  • manage_addZMSFile(), manage_addZMSGraphic():
    sind zu ersetzen durch die abstraktere Funktion manage_addZMSCustom(self, meta_id, values={}, REQUEST=None).

Folgende Funktionen sollten nicht mehr eingesetzt werden bzw. sind durch andere Ausdrücke zu ersetzen. Das Python-Module _deprecated.py liefert die entsprechend erneuerten API-Ausdrücke zurück:

  • getFile() ersetzen durch: getObjProperty('file',REQUEST)
  • getImage() ersetzen durch: getObjProperty('img',REQUEST)
  • getObjProperty('titleshort',REQUEST) ersetzen durch: getObjProperty('titlealt',REQUEST) oder getTitlealt(REQUEST)
  • getFormat(REQUEST) ersetzen durch: getObjProperty('format',REQUEST)
  • Referenzen auf File-Resourcen (z.B. innerhalb von CSS-Files), die per get_conf_blob? path=content.ZMS.custom.objects/ mySpecObjID/ __obj_attrs__/ mySpecObjAttr/ custom aus der Spec. Obj. Definition gezogen wurden, müssen nun performanter per content/ metaobj_manager/ mySpecObjID.mySpecObjAttr gezogen werden.

Mit dem 04.04.2008 steht ZMS-2.11.0 nun als Stable Version zum Download bereit.

Wichtig für Update

Mit ZMS 2.11.1 sind die Python-Module für die ehemaligen Standard-Objekte aus dem Code entfernt worden. Daher ist die Version 2.11.0 ein unbedingt erforderlicher Zwischenschritt für Updates von Versionen 2.10 oder tiefer.
Und weiterhin: Versionen, die älter sind als 2.10.3#19 benötigen zusätzlich den Build 2.10.3#18 als Zwischenschritt. Ein Update von 2.9.4 sähe also so aus:
  1. Step: 2.10.3#18
  2. Step: 2.11.0
  3. Step: 2.11.1

Erstellt von: Dr. Frank Hoffmann , erstellt am:  27.06.2008 , zuletzt geändert: 10.05.2010