Portlets
Portlet modifizieren
Um eine angepasste SearchBox in der linken Spalte anzeigen, wirdzunächst in browser/templates/ die Datei search_portlet.pt mit den gewünschten Anpassungen angelegt. Anschließend wird in browser/configure.zcml dieses Template angegeben:
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
xmlns:plone="http://namespaces.plone.org/plone"
i18n_domain="vs.theme">
<include package="plone.app.portlets" />
...
<plone:portletRenderer
portlet="plone.app.portlets.portlets.search.ISearchPortlet"
layer=".interfaces.IThemeSpecific"
template="templates/search_portlet.pt"
/>
...
</configure>
Portlets zuweisen
- Plone 3.0
In setuphandlers.py lässt sich das Search-Portlet der linken Spalte zuweisen:
from zope.component import getMultiAdapter from zope.component import getUtility from plone.portlets.interfaces import IPortletAssignmentMapping from plone.portlets.interfaces import IPortletManager from plone.app.portlets import portlets class Generator: def setupPortlets(self, portal): leftColumn = getUtility(IPortletManager, name=u'plone.leftcolumn', context=portal) rightColumn = getUtility(IPortletManager, name=u'plone.rightcolumn', context=portal) left = getMultiAdapter((portal, leftColumn,), IPortletAssignmentMapping, context=portal) right = getMultiAdapter((portal, rightColumn,), IPortletAssignmentMapping, context=portal) if u'search' not in left: left[u'search'] = portlets.search.Assignment(enableLivesearch=True,) def setupVarious(context): if context.readDataFile('vs.theme_various.txt') is None: return site = context.getSite() gen = Generator() gen.setupPortlets(site)- Plone 3.1
Hier erfolgt die Zuweisung in profiles/default/portlets.xml:
<?xml version="1.0"?> <portlets xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="plone"> <assignment manager="plone.leftcolumn" category="context" key="/" type="portlets.Search" name="search" insert-before="*" > <property name="enableLivesearch">True</property> </assignment> </portlets>- type (erforderlich)
- Der Name des Portlets entsprechend dem name-Atribut in der <portlet />-Anweisung in portlets.xml.
- manager (erforderlich)
Der Name des Portlet-Manager, der verwendet werden soll. Portlet-Manager werden registriert in portlets.xml, z.B.:
<portletmanager name="plone.leftcolumn" type="plone.app.portlets.interfaces.ILeftColumn" />
In Plone verfügbare Portlet-Manager sind:
- plone.leftcolumn und plone.rightcolumn
- für die linke und rechte Spalte
- plone.dashboard1 bis plone.dashboard4
- für die vier Spalten des Dashboard.
- category (erforderlich)
Die zu verwendende Kategorie. Mögliche Kategorien sind:
- context
- content_type
- group
- user (Diese Angabe ist vmtl. nur für die Dashboard-Portlet-Manager sinnvoll.)
- key (erforderlich)
Der Schlüssel, mit dem das Portlet zugewiesen wird.
- Für die context-Kategorie ist der Schlüssel die Angabe des Pfades relativ zur Site-Root, z.B. /.
- Für die content_type-Kategorie ist der Schlüssel die Angabe des Artikeltyps.
- Für die group-Kategorie ist der Schlüssel die Angabe der ID einer bestimmten Gruppe.
- Für die user-Kategorie ist der Schlüssel die Angabe der user-ID.
- name (optional)
- Der Name der Zuweisung. Wird keine Name angegeben, wird ein eindeutiger Name erzeugt. Wird ein bereits bestehender Name verwendet, der denselben key, dieselbe Kategorie und denselben Portlet-Manager verwendet, so wird dieser überschrieben.
- insert-before (optional)
Dieser Parameter kann verwendet werden um die Reihenfolge der Portlets festzulegen.
- Ist der Wert *, wird das Porlet an oberster Stelle platziert.
- Ist der Wert der Name eines anderen Portlets, wird das einzufügende Portlet direkt über diesem angezeigt.
- Wird kein Wert angegeben, wird das Porlet zuunterst angezeigt.
Die Portlets werden dabei in der Reihenfolge verarbeitet und eingefügt, wie sie in der portlets.xml-Datei angegeben sind.
Hier noch ein Beispiel für das Zuweisen eines Portlets im Dashboard eines Nutzers:
<assignment name="quick-links" category="user" key="veit" manager="plone.dashboard1" type="plone.portlet.collection.Collection"> <property name="show_more">True</property> <property name="header">Quick links</property> <property name="limit">10</property> <property name="target_collection">/quick-links/quick-links</property> <property name="random">False</property> <property name="show_dates">False</property> </assignment>
Übernommene Portlets blockieren
- Plone 3.0
Von übergeordneten Objekten übernommene Portlets lassen sich in setuphandlers.py blockieren, z.B. mit:
from plone.portlets.constants import CONTEXT_CATEGORY as CONTEXT_PORTLETS class Generator: def setupPortlets(self, portal): rightColumn = getUtility(IPortletManager, name=u'plone.rightcolumn', context=portal) portletAssignments = getMultiAdapter((members, rightColumn,), ILocalPortletAssignmentManager) portletAssignments.setBlacklistStatus(CONTEXT_PORTLETS, True)- Plone 3.1
Das Blockieren lässt sich hier in profiles/default/portlets.xml konfigurieren, z.B.:
<blacklist manager="plone.rightcolumn" location="/Members" category="context" status="block" />- manager (erforderlich)
- Der Name des Portlet-Managers (Spalte), für die die Portlets nicht übernommen werden sollen.
- category (erforderlich)
- Die Kategorie, die geblockt werden soll: context, group oder content_type.
- location (erforderlich)
- Ein relativer Pfad, der den Ordner angibt, in dem die Portlets geblockt werden sollen.
- status (erforderlich)
Der Status für übernommene Portlets einer Kategorie in einem bestimmten Ordner:
- block
- Portlets des übergeordneten Objekts werden übernommen.
- show
- Portlets der angegebenen Kategorie werden angezeigt.
- acquire
- Portlets des übergeordneten Objekts werden übernommen.
Portlets ausblenden
Portlets lassen sich in setuphandlers.py ausblenden, z.B. mit:
from zope.component import getUtility
from zope.component import getMultiAdapter
from plone.portlets.interfaces import IPortletManager
from plone.portlets.interfaces import IPortletAssignmentMapping
class Generator:
def setupPortlets(self, portal):
rightColumn = getUtility(IPortletManager, name=u'plone.rightcolumn', context=portal)
right = getMultiAdapter((portal, rightColumn,), IPortletAssignmentMapping, context=portal)
if u'calendar' in right:
del right["calendar"]
def setupVarious(context):
if context.readDataFile('vs.theme_various.txt') is None:
return
site = context.getSite()
gen = Generator()
gen.setupPortlets(site)
Portlets entfernen
- Plone 3.0
Portlets lassen sich in setuphandlers.py entfernen, z.B. mit::
from zope.component import getSiteManager from zope.component import getUtilitiesFor from plone.portlets.interfaces import IPortletType from Products.CMFCore.utils import getToolByName def removeRegistrantsPortlet(self): sm = getSiteManager() for name, portletType in getUtilitiesFor(IPortletType): if name == "portlets.Registrants": sm.unregisterUtility(provided=IPortletType, name=name)- Plone 3.1
Hier erfolgt das entfernen von Portlets in profiles/default/portlets.xml:
<assignment remove="true" name="calendar" category="context" key="/" manager="plone.rightcolumn" type="portlets.Calendar" />
Anmerkung: Das Erstellen neuer Portlets wird hier beschrieben: Portlet erstellen.

