Deutsche Zope User Group
Gast 1 Benutzer online
DZUG-News

CPSkins

Mit Skins arbeiten (Entwurf)

Dokumentation (Entwurf): Wie schreibt man einen Skin und wie benutzt man das Skin-Tool (Werkzeug) des CMF.

Created by paul . Last modified 2001-06-12 07:06:54. �bertragen von Volker Bachschneider

Das Erscheinungsbild von Portalen bearbeiten

Einleitung

Dieses Dokument gibt einen �berblick �ber das Konzept von Skins, eine der neuen Technologien die mit dem CMF eingef�hrt werden, damit Anpassungen erm�glicht werden. Unterstellt wird die Vertrautheit mit Zope-Konzepten wie DTML und dem Zope-Suchwerkzeug.

Das Skin-Tool

Mit dem Zope CMF (Content Management Framework) wurde ein neues Konzept namens Tools (Werkzeuge) eingef�hrt. Diese Tools stelle Dienste f�r Inhaltsobjekte bereit und geben den Inhaltsobjekten die M�glichkeit ihren Inhalt zu repr�sentieren. Eins dieser Tools ist das Skin-Tool, portal_skins. Es trennt das spezifische Verhalten eine Web-Site von den Objekten im System. Dadurch wird eine h�herer Grad der Anpassung m�glich, ohne da� �nderungen in den Kernklassen der Objekte n�tig w�ren.

Die Probleme die gel�st werden

Viele in Python geschriebene Zope-Klassen sind direkt mit ihrem Management-Bildschirm verkn�pft. Das verbindet die Objekte jedoch zu stark mit ihrer Darstellung. Gelegentlich k�nnen ZClasses, die von Python-Klassen abgeleitet werden, so angelegt werden, das die ganze Logik in die Basisklasse genommen wird, deren Darstellung aber in DTML-Methoden der ZClass. Dabei entsteht jedoch ein Problem bei der Weitergabe: normalerweise w�rde ein CMF-Entwickler die Darstellung seiner Web-Site in einer ZClass anpassen. Mit einem neuen CMF-Release besteht jedoch Gefahr, das diese Anpassungen �berschrieben werden.

Folgende Probleme m�ssen daher gel�st werden:

  • die Darstellung eines Objekts mu� vom Objekt getrennt werden.
  • Die Standarddarstellung der Objekte sollte leicht zu pflegen sein und mit dem Kernprodukt weitergegeben werden, so da� keine Anpassung durch die CMF-Anwender n�tig wird.
  • CMF-Anwender sollten ihre Anpassungen nicht in die mitgegebenen Standarddarstellungen hineinschreiben. Zugleich aber sollte es einen Weg geben einfach Anpassungen vornehmen zu k�nnen.
  • Mehrere Skins sollten nebeneinander Bestand haben k�nnen. Dies hat allerlei Vorteile, einschlie�lich der M�glichkeit Web-Sites zu internationalisieren.

Die Probleml�sung

Wie nun l�st das Skin-Tool diese Probleme? Hier kommen einige Dinge zusammen:

Eine Definition der Layer (Schichten)

Ein ordnungsgem��er Skin ist eine Definition von Layern.

Was sind diese Layer?

Die Definition von Layern ist eine Liste ordner�hnlicher Objekte, die DTML, Bilder, Ordner, Properties (Eigenschaften) usw. enthalten. Ein Skin unter dem Titel Blau k�nnte seine Layer wie folgt definiert haben: blau, basic_css, general. Das bedeutet wenn nach einem Namen wie standard_html_header gesucht wird und der Skin Blau ist aktiv, dann zun�chst in blau gesucht, darauf in basic_css und schlie�lich in general.

Die Layer k�nnen an zwei Orten verankert sein:

  • In Dateisystem (Standard) -- Damit wird das Weitergabeproblem gel�st. Es sind besondere Objekte die eine Sicht auf auf DTML, Properties, Bilder usw. im Dateisystem des CMF-Produktes geben. Wichtig daran ist, das sie so nicht durch das Web ge�ndert werden k�nnen. Updates des CMF-Produkts ersetzen diese Dateien. Deshalb d�rfen hier die Anpassungen nicht eingebracht werden. Die Dateien werden als gesperrt angezeigt, was darauf abstellt, da� der Anwender sie nicht �ndern kann.
  • Gew�hnliche Ordner -- Normale Zope-Ordnerobjekte, die DTML-Methoden und andere Objekte enthalten k�nnen. Ein Update des CMF-Produkts �ndert den Inhalt dieser Ordner nicht. Durch eine besondere Aktion der im Dateisystem verankerten Objekte lassen diese sich in gew�hnliche Ordner umkopieren und dort anpassen.

Der Rest dieses Dokumentes erkl�rt die Feinheiten der Anpassung einer CMF-Site, die sich aus den obenstehenden Grundlagen ergeben.

Mit Anpassungen beginnen

Ein n�herer Blick auf das Skin-Tool

Unterstellt wird, da� eine Instanz einer CMF-Site eingerichtet wurde und man sich im Zope Management Interface (ZMI / Administrationsansicht) befindet

Im Folgenden wird das Skin-Tool n�her betrachtet, um zu erschlie�en woraus es sich standardm��ig zusammensetzt / was es in der Grundinstallation enth�lt. Zun�chst wechselt man im ZMI in das 'portal_skins'-Objekt der CMF-Site. In der Grundansicht contents sollte man etwa sieben oder acht Ordner sehen (plus Ordner f�r die Zope-Page-Templates), abh�ngig von Einrichtung und Konfiguration des CMF. Die meisten Ordnersymbole werden von kleinen gr�nen Schl�ssern verziert. Das sind die Objekte im Dateisystem. Diese Ordner und deren Inhalte k�nnen mit dem ZMI nicht ge�ndert werden. In der Grundinstallation gibt es einen gew�hnlichen Zope-Ordner im Skin-Tool: custom. Dort kann man mit den �nderungen beginnen.

Unter dem Properties-Tab des 'portal_skins'-Objekt, wird angezeigt, wie die Skins momentan konfiguriert sind. Standardm��ig sind drei Skins vordefiniert: Basic, No CSS, und Nouvelle. Ein Skin wird erzeugt, indem man verschiedene Ordner im Skin-Tool schichtet: Daf�r gibt es die Layer-Spalte in der Skin-Auswahl unter dem Properties-Tab. Eine Liste von Ordnern, durch Kommata getrennt, die die Suchreihenfolge des jeweiligen Skins festlegt.

Inhalte der Standardordner

Es gibt einen Grundbestand von Objekte im Dateisystem die mit dem Skin-Tool installiert werden. Dieser Abschnitt besch�ftigt sich mit denen Inhalten.

Images

Dieser Ordner enth�lt ausschlie�lich Bilder (keine Icons), die in den Standard-Skins verwendet werden.

content

Dieser Ordner enth�lt DTML-Methoden und Icons f�r den Basisumfang an Inhaltsobjekten (aus dem 'CMFDefault'-Paket). Also f�r Dinge wie Dokumente, Dateien, usw. Zus�tzlich einige DTML-Methoden f�r alle Inhaltsobjekte, wie etwa die Formulare zum Bearbeiten der Metadaten und andere Formulare die den Standard-Workflow unterst�tzen.

control

Dieser Ordner enth�lt DTML-Methoden mit allgemeinen Ablaufskripten. Beispielsweise folder_copy, eine Ummantelung der allgemeinen Methode zum Kopieren von Ordnern.

custom

Ein gew�hnlicher Zope-Ordner, um mit Anpassungen anzufangen. Ebenso k�nnen andere Zope-Ordner f�r diesen Zweck im Skin-Tool angelegt werden, f�r erste Schritte kann man jedoch auch hier beginnen.

generic

Das grunds�tzliche Erscheinungsbild der Web-Site. Hier sind etwa standard_html_header und die DTML-Methoden f�r die actions_box abgelegt, ebenso die DTML-Methode um die Portalseite zu konfigurieren. Ferner die Grundeinstellungen f�r das Style-Sheet, das der 'basic'-Skin verwendet.

no_css

Wird vom 'No CSS'-Skin verwendet. Der Ordner enth�lt ein Property-Objekt der das Style-Sheet der normalen DTML-Skins abschaltet.

nouvelle

Wird vom 'Nouvelle'-Skin verwendet. Der Ordner enth�lt das nouvelle_stylesheet, und ein Property-Objekt das die Wertangaben f�r den nouvelle_stylesheet enth�lt.

topic

Wenn CMF-Topic installiert ist, sollte es auch diesen Ordner geben. Er enth�lt alle Objekte die f�r Topics (Sammler) spezifisch sind.

Das Obenstehende ist hoffentlich eine gewisse Hilfe beim Auffinden der Dinge, die man auf der eigenen Web-Site anzupassen w�nscht. Ich habe mir einige grunds�tzliche Regeln zum Auffinden dieser Dinge zu eigen gemacht:

  • Benutze das Zope-Suchwerkzeug. Das Find tab (ZMI) kann au�erordentlich n�tzlich sein. Nimm es um in portal_skins, die Dinge zu finden die du anpassen willst, etwa standard_html_header.
  • Lies standard_html_header und standard_html_footer gr�ndlich genug, bis du das Zusammenwirken der verschiedenen Seitenkomponenten, die sie benutzen, verstanden hast. Du brauchst am Anfange vermutlich keine der beiden Dateien in gr��erem Umfang anzupassen. Aber du mu�t den Namen der Objekte kennen, die sie verwenden.
  • Vertiefe deine Kenntnisse �ber den grunds�tzlichen Zweck der Standardordner im Skin-Tool. Schau dir die verschiedenen DTML-Methoden an. Mit der Zeit wirst du Muster erkennen und dich erinnern was komplette Seiten erzeugt und welche Komponenten auf diesen Seiten Verwendung finden.

Eine einfache Anpassung (Veraltet: DTML)

Lassen Sie uns eine relativ einfache Anpassung machen. Wenn Sie sich auf einer Web-Site befinden, auf der noch keine News-Objekte publiziert wurden, gibt die Standard-news box der Portalseite normalerweise "No news are good news" an. Nehmen wir an Sie wollen das �ndern, so da� dort steht: "Es gibt nichts neues unter der Sonne". Zun�chst mu� man herausfinden wo zu �ndern ist. Weil die news box mit keinem Inhaltsobjekt fest verbunden ist, kann man vermuten, da� sie sich im 'generic'-Ordner findet. Schaut man nun unter portal_skins/generic nach, findet man eine paar DTML-Methoden, die im Namen news haben. W�hlen Sie jetzt news_box und sehen Sie sich an, was zur Anzeige kommt. Statt eines normalen Formular zum Bearbeiten von DTML-Methoden bekommt man ein ein graues Feld mit dem Quellcode. �ber dem Feld gibt es eine Ordnerliste in die hinein man den Quellcode zum Anpassen �bernehmen kann. Sofern man keine neuen Ordner in portal_skins angelegt hat, zeigt die Liste ausschlie�lich die Option custom. Dies gew�hlt dr�cken sie den Button Customize. Jetzt sollten Sie sich in einem normalen Formular zum Bearbeiten von DTML-Methoden befinden. Der aktuelle Pfad ist nun portal_skins/custom/news_box. Hier kann man mit den Anpassungen f�r die eigene Web-Site beginnen, unbeschadet aller k�nftigen �nderungen am CMF.

Pr�fen Sie in einem anderen Browserfenster, ob die Portal-Seite Ihrer CMF-Site in der news box "No news are good news" anzeigt (es wird weiterhin unterstellt, da� bislang keine News ver�ffentlicht wurden). In dem Fenster mit der Bearbeitungsansicht �ndern sie den Teil des Quellcodes der die Zeile "No news are good news" erzeugt in: "Es gibt nichts neues unter der Sonne". Wechseln Sie erneut in das Fenster mit der Portal-Seite, aktualisieren Sie sie - der ge�nderte Text sollte jetzt in der news box stehen.

Einen neuen Skin definieren

Neue Skins lassen sich recht einfach definieren. Im wesentlichen handelt es sich nur um die Fortsetzung des bislang Beschriebenen und die Anwendung von �blichen Zope Techniken.

Neue Ordner im Skin-Tool anlegen

Obwohl man alle Anpassungen in custom machen k�nnte ist es nicht unwahrscheinlich, das man mehr m�chte. Etwa zus�tzliche Skins anlegen und die Anpassungen organisieren. Das Skin-Tool l��t all das zu. Sie k�nnen neue normale Zope-Ordner in portal_skins anlegen, die dann als Ziel f�r die Objekte aus dem Dateisystem zur Verf�gung stehen.

Hier sollen keine ausf�hrlichen Beispiele gezeigt werden, worin der Nutzen zus�tzlicher Skins und Ordner liegt. Nur so weit: Ein Beispiel w�re ein "Druckerfreundlicher" Skin - der alle Seitendekorationen wegl�sst oder ein Skin, der spezielle Browsereigenschaften nutzt. F�r jeden dieser Skins kann man einen neuen Ordner in portal_skins anlegen und dort die entsprechenden �nderungen vornehmen.

Anpassungen in die neuen Ordner hineinnehmen

Das Vorgehen ist das gleiche, wie schon weiter oben beschrieben - ausgehend von einem Ordner mit Objekten im Dateisystem w�hlt man ein Objekt und dann in der Ordnerliste den neuen Ordner.

Skins definieren und anpassen

Erinnern Sie sich, da� ein Skin als Liste von Layern definiert wird und diese Layer Ordner in portal_skins sind. Es reicht also nicht zu, nur Ordner anzulegen, man mu� auch noch einen Skin konfigurieren der sie benutzt.

Das macht man unter dem Properties-Tab von portal_skins (im ZMI). Auf dieser Seite gibt es einen Bereich Skin selections mit einer Tabelle der Skin-Konfigurationen. Hier kann man Skins hinzuf�gen oder l�schen. Gleichfalls lassen sie sich hier konfigurieren.

Skins durchsuchen die angegebenen Reihenfolge der Layer von links nach rechts. In einer Basiskonfiguration, die CMF Topic umfasst, k�nnen Sie sehen, da� jede Skin-Konfiguration custom, topic, content, generic, control und Images enth�lt. Das bedeutet, wenn ein Name wie actions_box aufgel�st werden soll, wird erst in custom, dann in topic, dann in content und so weiter gesucht.

Wenn Sie neue Ordner zur Anpassung der Skins angelegt haben, k�nnen sie die Ordner entweder in die Listen der bereits definierten Skins aufnehmen, oder Sie definieren einen neuen Skin. Im ersten Fall empfiehlt es sich die neuen Ordner am Anfang einzuf�gen. Im zweiten Fall, empfiehlt es sich die Liste eines existierenden Skin in den neuen Skin zu kopieren (etwa Basic) und dann wiederum die neuen Layer am Anfang einzuf�gen.


Weitere Hinweise:

Siehe auch PortalSkinsCheckliste

  • http://www.zopelabs.com/cookbook/1030575426 - Tracing Skin Paths - With a complex skin, it can be hard to keep track of which folder in the skin path actually provides a particular object. This script will tell you. Put it in your portal_skins tool,