======== z3c.jbot ======== Mit `z3c.jbot `_ lassen sich Views und alle Objekte des *Skins Tool*, wie Page Templates, CSS- und Javascript-Dateie einfach überschreiben oder erweitern. Überschreiben eines bestehenden Views ===================================== #.1 Zunächst tragen wir in unser Theme-Produkt die Abhängigkeit von ``z3c.jbot`` in ``vs.theme/setup.py`` ein:: ... install_requires=[ 'setuptools', 'z3c.jbot', ... ], ... #. Anschließend wird folgende Direktive in ``vs.theme/vs/theme/configure.zcml`` angegeben:: ... ... #. Der Layer wird nun konfiguriert in ``vs.theme/vs/theme/profiles/default/browserlayer.xml``:: #. Der Layer erwartet das Interface ``IThemeSpecific`` in der Datei ``vs.theme/vs/theme/interfaces.py``:: from plone.theme.interfaces import IDefaultPloneLayer from plone.portlets.interfaces import IPortletManager class IThemeSpecific(IDefaultPloneLayer): """Marker interface that defines a Zope 3 browser layer. """ #. Schließlich wird der Ordner ``overrides`` angelegt und darn z.B. eine Kopie von ``atct_topic_view.pt`` als ``vs.theme/vs/theme/overrides/Products.ATContentTypes.skins.ATContentTypes.atct_topic_view.pt``. Dieses PageTemplate lässt sich dann z.B. um ein Teaser-Element erweitern::
Erweitern bestehender Templates =============================== Mit `z3c.jbot`_ lassen sich auch einfach neue Templates aus bestehenden erstellen. #. Hierzu wird nun in ``vs.theme/vs/theme/overrides/Products.ATContentTypes.skins.ATContentTypes.atct_topic_view.pt`` eine Bedingung für die Tabellenzeile mit dem Teaser eingefügt:: ... #. Nun wird ``with_teaser`` definiert in ``vs.theme/vs/theme/browser/topic.py``:: from Products.Five.browser import BrowserView class TopicTeaserView(BrowserView): """ Topic table view with teaser """ def __call__(self): view = self.context.restrictedTraverse('atct_topic_view') return view(with_teaser=True) #. ``hasTeaserImage`` wird aus dem Index abgefragt. Sehen Sie hierzu `plone.indexer`_. .. _`plone.indexer`: plone.indexer #. Anschließend wird in ``vs.theme/vs/theme/browser/configure.zcml`` die neue Ansicht registriert:: #. Schließlich wird dieser View in derselben ``zcml``-Datei noch für das `Hinzufügen`-Menü konfiguriert:: ...