Quelle est la meilleure façon de désactiver les types de portlets sur l'ensemble du site dans Plone 4.1 ? La configuration par défaut donne ~10 types de portlets, mais les utilisateurs du site n'en utilisent que quelques-uns (texte statique, nouvelles).
Réponse
Trop de publicités?Les portlets sont enregistrés en tant qu'utilitaires avec le IPortletType
interface avec la machinerie des composants zope. Ces enregistrements sont générés pour vous lors de l'enregistrement des portlets avec portlets.xml. L'interface de gestion des portlets utilise ensuite ces enregistrements utilitaires pour énumérer les portlets que vous pouvez ajouter.
Heureusement, plone.portlets.utils
fournit une API pratique pour désenregistrer ces portlets à nouveau :
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.
"""
En addview
Le paramètre est une chaîne, et est le même que celui utilisé dans l'enregistrement d'un portlet.xml. Par exemple, le portlet calendrier est enregistré comme :
<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>
Vous pouvez donc supprimer le portlet calendrier de votre site en exécutant le code suivant :
from plone.portlets.utils import unregisterPortletType
unregisterPortletType(site, 'portlets.Calendar')
Vous pouvez également utiliser le fichier GenericSetup portlets.xml pour supprimer les portlets pendant l'installation, en listant simplement les portlets. addview
et ajouter un paramètre remove
à l'élément :
<?xml version="1.0"?>
<portlets>
<portlet addview="portlets.Calendar" remove="true" />
</portlets>
Merci à David Glick de l'avoir trouvé pour nous.