Plone: Überschreiben von Views, Viewlets und resource Einträgen
Ü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.
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