==================
diazotheme-Produkt
==================
Häufig sollen die Resourcen in einem Python-Paket verwaltet werden.
Erstellen und Registrieren des Python-Pakets
============================================
Ein solches Python-Paket lässt sich einfach erstellen mit::
$ cd src/
$ paster create -t plone vs.diazotheme
...
Register Profile (Should this package register a GS Profile) [False]: True
...
Hiermit erstellen wir das Python Egg ``vs.diazotheme`` aus dem Template ``plone`` mit einem Profil für das *Generic Setup Tool*.
Damit dieses Egg auch der Instanz zur Verfügung steht, ändern Sie Ihre ``buildout.cfg``-Datei folgendermaßen ab::
[buildout]
...
develop =
...
src/vs.diazotheme
...
[instance]
...
eggs =
...
vs.diazotheme
zcml =
...
vs.diazotheme
Rufen Sie anschließend Ihr ``./bin/buildout``-Skript erneut auf.
Erstellen Ihres Diazo-Themes
============================
Zunächst wird hierzu in ``vs.diazotheme/vs/diazotheme/configure.zcml`` das Verzeichnis ``Invention`` als Theme registriert::
Erstellen Sie hierin ein eigenes Theme oder laden eins von `Open Source Web Design`_ herunter, z.B. `Invention`_::
$ cd vs.diazotheme/vs/diazotheme/
$ curl -O http://www.oswd.org/files/designs/3293/Invention.zip
$ unzip -v Invention.zip
Anschließend können Sie in diesem Theme die Datei ``manifest.cfg`` erstellen mit Titel, Beschreibung, Verweis auf die ``rules.xml``-Datei etc.::
[theme]
title = vs.diazotheme
description = A diazo theme for veit schiele communications
rules = /++theme++vs.diazotheme/rules.xml
[theme:parameters]
ajax_load = python: 'ajax_load' in request.form
Für die XSLT-Transformationsregeln erstellen Sie anschließend in ``Invention`` die `rules.xml`_-Datei.
Diazo-Konfiguration
===================
Damit Plone die Regeldatei mit den XSLT-Transformationen auch liest, wird ein Profil ``profiles/default/registry.xml`` erstellt, das die Werte im Formular *Diazo theme settings* festlegt::
True/++theme++vs.diazotheme/rules.xml/++theme++vs.diazotheme
``rules``
Statt des Verweises auf die ``rules.xml``-Datei in der ``theme``-Ressource mit ``/++theme++vs.diazotheme`` könnte hier auch ein Python-Aufruf stehen:
python://vs.diazotheme/Invention/rules.xml
``absolutePrefix``
Auch hier wurde wieder auf die registrierte Theme-Ressource verwiesen::
/++resource++vs.diazotheme
Die Angabe konvertiert relative URLs zu absoluten unter Verwendung dieses Präfixes.
CSS-Dateien registrieren
========================
Hierzu erstellen wir die Datei ``profiles/default/cssregistry.xml`` mit folgendem Inhalt::
``not:request/HTTP_X_THEME_ENABLED | nothing``
sorgt dafür, dass die ``public.css``-Datei nicht ausgeliefert wird wenn
in der HTML-Anfrage ``HTTP_X_THEME_ENABLED`` enthalten ist, also die
Plone-Site über Diazo ausgeliefert wird.
``request/HTTP_X_THEME_ENABLED | nothing`` würde umgekehrt eine Datei
nur ausliefern, wenn die Anfrage durch Diazo gestellt wird.
``++theme++vs.diazotheme/styles.css``
registriert unsere ``styles.css``-Datei an Plones *Stylesheets
Registry*.
``applyPrefix``
In Plone 4 kann eine Stylesheetdatei auch mit relativen URLs geparst
werden.
Schließlich erstellen wir noch die Datei ``profiles/default/metadata.xml`` um mit unserem ``vs.diazotheme``-Produkt auch gleichzeitig das benötigte ``plone.app.theming`` mitzuinstallieren::
1profile-plone.app.theming:default
Wenn Sie nun das Buildout-Skript erneut aufrufen, anschließend die Instanz starten und eine neue Plone-Site mit dem Profil ``vs.diazotheme`` erstellen, sollte die Plone-Site mit dem neuen Theme erscheinen.
Theme-Debugging
===============
Kompilieren
-----------
Wenn Zope im Entwicklungsmodus gestartet wird, z.B. in der Konsole mit
``./bin/instance fg`` im Vordergrund läuft, wird das Thema bei jeder
Anfrage neu kompiliert. Üblicherweise wird jedoch nur beim ersten Aufruf
kompiliert und anschließend nur noch bei Änderungen im *Control Panel*.
Soll auch in Entwicklungsmodus nicht bei jedem Aufruf neu kompiliert
werden, so sollten Sie die Umgebungsvariable ``DIAZO_ALWAYS_CACHE_RULES``
aktivieren, also z.B. die Instanz starten mit::
$ DIAZO_ALWAYS_CACHE_RULES=1 ./bin/instance fg
Deaktivieren des Themes
-----------------------
Auch im Entwicklungsmodus ist es möglich, vorübergehend das Thema zu deaktivieren indem Sie den Query String Parameter ``diazo.off=1`` anhängen,
also z.B.::
http://localhost:8080/mysite/frontpage?diazo.off=1
Overlay
-------
Schließlich können Sie sich in einem Overlay Ihre Diazo-Regeln anzeigen
lassen, wobei *grün* bedeutet, dass die Regel angewendet wird, bei *rot* hingegen die Regel nicht angewendet wird.
.. figure:: diazo-debug.png
:alt: Diazo-Debug-Konsole
Um diese Anscicht zu erhalten, ergänzen Sie die URL im Browser um
``?diazo.debug=1``, also beispielsweise::
http://localhost:8080/mysite/front-page?diazo.debug=1
Der Parameter wird in Nicht-Entwicklungsmodus ignoriert.
``xsl:message``
---------------
Der Debugger untersucht jede Regel und Zustand isoliert. Wird eine Regel
jedoch durch eine andere Regel außer Kraft gesetzt, zeigt er dies nicht an.
Wird also z.B. wenn eine ``drop``-Regel ein Element entfernt, dem eine
`àppend``-Regel etwas hinzufügen möchte, also z.B.::
Some content
...
Dabei fügt ```` nichts in das Dokument selbst ein, sondern
nur in das ``error_log``, das ebenfalls im Overlay angezeigt wird.
.. _`Open Source Web Design`: http://www.oswd.org/
.. _`Invention`: http://www.oswd.org/design/information/id/3293
.. _`rules.xml`: rules.xml/view
.. _`Resourcen registrieren`: http://www.plone-entwicklerhandbuch.de/plone-entwicklerhandbuch/erscheinungsbild/resourcen-registrieren.html