Plone: Zope3 Viewlets
Seit Plone3 finden Zope3-Viewlets immer häufiger Verwendung in Plone. Im folgenden wird gezeigt, wie ein eigenes Viewlet erstellt und dieses an die gewünschte Stelle in Plone eingebaut werden kann.
Viewlet code
from plone.app.layout.viewlets.common import ViewletBase
class ExampleViewlet(ViewletBase):
def update(self):
"""
"""
self.id = self.context.id
Viewlet registrieren
<browser:viewlet
name="inqbus.viewletexample"
manager="inqbus.viewletexample.browser.manager.IExampleViewletmanager"
class="inqbus.viewletexample.browser.viewlets.ExampleViewlet"
template="templates/example_viewlet.pt"
permission="zope2.View"
/>
Viewlet per GenericSetup aktivieren
<?xml version="1.0"?>
<object>
<order manager="inqbus.exampleviewletmanager">
<viewlet name="inqbus.viewletexample" insert-before="*" />
</order>
</object>
Eigener Viewletmanager definieren
Wenn man das Viewlet nicht in die bestehenden Viewletmanager von Plone einhängen möchte, kann man sich selbst, in einem Template einen content provider definieren und einen Viewletmanager hierfür definieren.
from zope.viewlet.interfaces import IViewletManager
class IExampleViewletmanger(IViewletManager):
""" A viewlet manager that sits in the template and render the viewlets
"""
In einem Template kann man für den Viewletmanager wie folgt einen Platzhalter definieren. Hier werden die Viewlets dann eingefügt.
<div tal:replace="structure provider:inqbus.example_viewletmanager" />
Eigenen Viewletmanager registrieren
<browser:viewletManager
name="inqbus.exampleviewlet"
provides=".manager.IExampleViewletmanager"
permission="zope2.View"
class="plone.app.viewletmanager.manager.OrderedViewletManager"
/>
Viewlet page template
Als Page Template braucht es nicht viel, jeder ZPT Schnipsel ohne komplettes XHTML-Gerüst reicht. Das Viewlet wird immer in einem anderen Template gerendert und benötigt daher kein Grundgerüst.

