7 Stimmen

Portlet-Typen standortweit in Plone deaktivieren

Wie kann ich Portlet-Typen in Plone 4.1 am besten standortweit deaktivieren? In der Standardeinstellung gibt es ~10 Portlet-Typen, aber die Nutzer der Seite brauchen nur wenige (statischer Text, Nachrichten).

7voto

Martijn Pieters Punkte 953257

Portlets werden als Dienstprogramme mit dem IPortletType Schnittstelle mit der Zope-Komponenten-Maschinerie. Diese Registrierungen werden für Sie generiert, wenn Sie Portlets mit portlets.xml registrieren. Die Portlet-Verwaltungsoberfläche verwendet dann diese Dienstprogrammregistrierungen, um die Portlets aufzulisten, die Sie hinzufügen können.

Zum Glück, plone.portlets.utils bietet eine praktische API, um die Registrierung dieser Portlets wieder aufzuheben:

def unregisterPortletType(site, addview):
    """Unregister a portlet type.

    site is the local site where the registration was made. The addview 
    should is used to uniquely identify the portlet.
    """

Le site addview ist eine Zeichenkette und entspricht der in der portlet.xml-Registrierung verwendeten. Zum Beispiel wird das Kalender-Portlet registriert als:

<portlet
  addview="portlets.Calendar"
  title="Calendar portlet"
  description="A portlet which can render a calendar."
  i18n:attributes="title;
                   description"
  >
  <for interface="plone.app.portlets.interfaces.IColumn" />
  <for interface="plone.app.portlets.interfaces.IDashboard" />
</portlet>

Sie können also das Kalender-Portlet von Ihrer Website entfernen, indem Sie das folgende Code-Snippet ausführen:

from plone.portlets.utils import unregisterPortletType
unregisterPortletType(site, 'portlets.Calendar')

Sie können auch einfach die Datei GenericSetup portlets.xml verwenden, um die Portlets während der Installation zu entfernen, indem Sie die Portlets auflisten addview Parameter und fügen Sie ein remove Attribut an das Element:

<?xml version="1.0"?>
<portlets>
  <portlet addview="portlets.Calendar" remove="true" />
</portlets>

Vielen Dank an David Glick, der diesen Artikel für uns gefunden hat.

5 Stimmen

Wenn ich den Code richtig lese, können Sie den Portlet-Typ auch über GenericSetup in portlets.xml abmelden; z. B. <portlet addview="portlets.Calendar" remove="true" />

0 Stimmen

Sie haben Recht; das habe ich beim ersten Mal übersehen, weil es direkt die Komponenten-API verwendet. Ich werde die Antwort aktualisieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X