Plone3-Theme-Package
Erstellen des Eggs
$ cd src $ paster create -t plone3_theme Enter namespace_package (Namespace package (like plonetheme)) ['plonetheme']: vs Enter package (The package contained namespace package (like example)) ['example']: theme Enter skinname (The skin selection to be added to 'portal_skins' (like 'My Theme')) ['']: vs.theme Enter skinbase (Name of the skin selection from which the new one will be copied) ['Plone Default']: Enter empty_styles (Override default public stylesheets with empty ones?) [True]: False Enter include_doc (Include in-line documentation in generated code?) [False]: Enter zope2product (Are you creating a Zope 2 Product?) [True]: ... Enter zip_safe (True/False: if the package can be distributed as a .zip file) [False]:
- Enter empty_styles
- Wenn die Skin-Anpassungen sehr umfangreich sind oder es sich um eine performance-kritische Anwendung handelt empfehle ich, den Skin vollständig neu aufzusetzen und Enter empty_styles mit True anzugeben.
- Enter skinbase
In Plone 4 kann hier zwischen folgenden beiden Skins gewählt werden:
- Sunburst Theme
Ein neuer Skin aus dem plonetheme.sunburst-Egg.
Sunburst ist der Standard-Skin für neu erstellte Plone-4-Sites.
- Plone Classic Theme
- Der aus Plone 3 bekannte Plone Default-Skin. Er ist nun im plonetheme.classic-Egg zu finden.
- Plone Default
- Der Plone Default-Skin ist in Plone 4 nur noch ein minimalistischer Skin, der ideal geeignet ist für die nachgelagerte Gestaltung einer Plone-Site mit XDV oder Deliverance.
In Plone 3 besteht üblicherweise die Wahl zwischen zwei Skins:
- Plone Default
- Der Standard-Skin.
- NuPlone
- Ein modernerer Skin für Plone 3.
Verzeichnisübersicht des vs.theme-Produkts
Der Dateibaum befindet sich in src/vs.theme/vs/theme/. Darin:
- configure.zcml
- schließt zwei weitere Konfigurationsdateien ein: profiles.zcml und skins.zcml.
- profiles.zcml
- registriert das Generic-Setup-Profil und weitere Importschritte mit dem Handler vs.theme.setuphandlers.setupVarious.
- skins.zcml
registriert die folgenden Verzeichnisse im Skins Tool:
- vs_theme_custom_images
- vs_theme_custom_templates
- vs_theme_styles
- skins/
- hier liegen die Verzeichnisse, die als Layer in vs.theme eingebunden werden.
- profiles/default
- Profile für die css- und javascript-Registries, skins und viewlets sowie weiterer Importschritte.
- setuphandlers.py
- enthält zunächst mit setupVarious nur eine Dummy-Methode, die jedoch bei Bedarf genutzt werden kann.
- browser/
enthält die Zope3 browser views
- interfaces.py
- definiert mit IThemeSpecific ein Marker-Interface.
- stylesheets/
- kann CSS-Dateien für die Browser Views enthalten.
- images/
- ist in configure.zcml als resourceDirectory registriert.
Ändern der buildout.cfg-Datei
[buildout]
...
eggs =
elementtree
vs.policy
vs.theme
develop =
src/vs.policy
src/vs.theme
...
[instance]
zcml =
vs.policy
Anschließend wird das Buildout-Projekt neu erstellt mit:
./bin/buildout -No
Registrieren von vs.theme
Statt eines weiteren zcml-slugs für vs.theme werden wir vs.policy so ändern, dass es vs.theme mitregistriert. Hierzu wird in src/vs.policy/vs/policy/configure.zcml folgende Zeile eingefügt:
<include package="vs.theme" />
Starten wir nun die Zope-Instanz erneut mit ./bin/instance start, sollte auch vs.theme in Zope Management Interface → Control_Panel → Products erscheinen.
Anmerkung: Beim Aufruf von ./bin/instance restart würde der sys.path nicht erneut eingelesen werden und ggf. stünde dann``vs.theme`` nicht der Instanz zur Verfügung.
Plone 3.3
Ab Plone 3.3 können Sie stattdessen auch z3c.autoinclude verwenden. Dieses Paket erstellt automatisch zwei neue ZCML-Anweisungen: includeDependencies und includePlugins. Wir verwendenen nun includePlugins in unserem Theme-Produkt um atuomatisch einen tcml-slug generieren zu lassen. Hierzu tragen wir in der Datei vs.theme/vs/theme/setup.py folgendes ein, sofern dies nicht bereits durch das plone3_theme-Template geschehen ist:
setup(name='vs.theme',
…
entry_points="""
# -*- entry_points -*-
[z3c.autoinclude.plugin]
target = plone
""",
…
)
Installieren von vs.theme
Plone 3.0
Damit vs.theme auch beim Installieren von vs.policy in einer Plone-Site mitinstalliert wird, wird in src/vs.policy/vs/policy/setuphandlers.py folgendermaßen geändert:
from Products.CMFCore.utils import getToolByName
PRODUCT_DEPENDENCIES = ('vs.theme',)
class Generator:
def installProducts(self, portal):
qi = getToolByName(portal, 'portal_quickinstaller')
for product in PRODUCT_DEPENDENCIES:
if qi.isProductInstalled(product):
qi.reinstallProducts([product])
else:
qi.installProduct(product, locked=0)
…
def setupVarious(context):
…
gen.installProducts(site)
Durch die Variable PRODUCT_DEPENDENCIES ist das Skript flexibel genug, um gegebenenfalls auch noch weitere Produkte mit vs.policy installieren zu können.
Plone 3.1
Ab Plone 3.1 können Abhängigkeiten in src/vs.policy/vs/policy/profiles/default/metadata.xml angegeben werden:
<?xml version="1.0"?>
<metadata>
<version>1.0</version>
<dependencies>
<dependency>profile-vs.theme:default</dependency>
</dependencies>
</metadata>
Test für das vs.policy-Produkt
Zunächst wird die Datei src/vs.policy/vs/policy/tests/base.py nach ztc.installPackage('vs.policy') um folgende Zeile ergänzt:
ztc.installPackage('vs.theme')
Damit wird das Paket vs.theme in der Zope-Instanz installiert.
Anschließend wird in src/vs.policy/vs/policy/tests/test_setup.py in der Klasse TestSetup folgender Test hinzugefügt:
def test_theme_installed(self):
skins = getToolByName(self.portal, 'portal_skins')
layer = skins.getSkinPath('vs.theme')
self.failUnless('vs_theme_custom_templates' in layer)
self.assertEquals('vs.theme', skins.getDefaultSkin())
Hiermit wird getestet,ob vs_theme_custom_templates als Layer im Plone Skins Tool verfügbar ist und vs.theme der Standard-Skin ist.
