Benutzerspezifische Werkzeuge
Sie sind hier: Startseite Erscheinungsbild

Plone3-Theme-Package

erstellt von Veit Schiele zuletzt verändert: 14.02.2010 22:35 © Veit Schiele 2007–2009

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]:

Anmerkung: Nur wenn die Skin-Anpassungen sehr umfangreich sind oder es sich um eine performance-kritische Anwendung handelt kann es sich empfehlen, den Skin vollständig neu aufzusetzen und empty_styles mit True anzugeben.

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 restart, sollte auch vs.theme in Zope Management Interface → Control_Panel → Products erscheinen.

Installation 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.

Artikelaktionen