Direkt zum Inhalt | Direkt zur Navigation

Benutzerspezifische Werkzeuge

Sie sind hier: Startseite / Tech-Blog / Plone: Überschreiben von Views, Viewlets und resource Einträgen

Plone: Überschreiben von Views, Viewlets und resource Einträgen

Plone bietet vielfältige Möglichkeiten, vorhandene Elemente zu überschreiben. Unter anderem können wir mit Hilfe einfacher ZCML-Anweisungen leicht Views, Viewlets, Resource-Einträge usw von Plone oder Plone-Erweiterungen überschreiben.

Überschreiben von einem Resource-Eintrag einer Plone-erweiterung

Wir haben z.B. einen Originaleintrag einer Plone-Erweiterung, die wir überschreiben möchten.

<browser:resource
     name="jquery.prettyPhoto.js"
     file="javascript/jquery.prettyPhoto.js"
     layer="..interfaces.IPrettyPhotoSpecific"
/>

Überschreiben mit einem Layer

Wir übernehmen einfach die Originalanweisung in eine configure.zcml in unserem Theme Package und übernehmen ebenfalls die zugehörige Ressource jquery.prettyPhoto.js. Wäre hier jetzt kein Layer verwendet worden, könnten wir einfach die gleiche Anweisung plus einer Layer-Anweisung in unserem Theme verwenden. Aber da hier schon im Original ein Layer definiert ist, müssen wir dafür sorgen das unsere Anweisung spezifischer ist. Dies erreichen wir in dem wir einen eigenen Layer angeben und diesen von dem Original-Layer ableiten.

<browser:resource
     name="jquery.prettyPhoto.js"
     file="javascript/jquery.prettyPhoto.js"
     layer=".interfaces.IThemeSpecific"
/>

Der Layer IThemeSpecific ist dann wie folgt in unserem Theme definiert.

System Message: ERROR/3 (<string>, line 27)

Unexpected indentation.
from collective.prettyphoto.interfaces import IPrettyPhotoSpecific


class IThemeSpecific(IPrettyPhotoSpecific):
    """Marker interface that defines a Zope 3 browser layer.
    """

Nach einem Neustart von Plone sollte jetzt unsere Version der Resource verwendet werden.

Überschreiben mit overwrites.zcml

Eine etwas gröbere Methode ZCML-Registrierungen zu überschreiben ist es, sie per overwrites.zcml zu überschreiben. Dies kann z.B. sinnvoll sein, wenn man die Registrierung für die ganze Zope-Instanz überschreiben möchte.

hierzu legen wir eine overwrites.zcml in unserem Package an und kopieren einfach die Originalanweisung hinein.

<browser:resource
     name="jquery.prettyPhoto.js"
     file="javascript/jquery.prettyPhoto.js"
     layer="collective.prettyphoto.interfaces.IPrettyPhotoSpecific"
/>

In der buildout.cfg muss die overwrites für dieses Package dann expliziet geladen werden. Wenn unser Theme Package my.theme heißt, dann lautet der Eintrag wie folgt.

zcml =
    my.theme-overrides