在Plone 4.1中禁用站点范围内的portlet类型的最佳方法是什么?默认设置提供~10个portlet类型,但站点用户只有少数用例(静态文本,新闻)。
答案 0 :(得分:7)
Portlet注册为实用程序,其中IPortletType
接口与zope组件机制一起注册。在使用portlets.xml注册portlet时,会为您生成这些注册。然后,portlet管理UI使用这些实用程序注册来枚举您可以添加的portlet。
幸运的是,plone.portlets.utils
提供了一个方便的API来再次注销这些portlet:
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.
"""
addview
参数是一个字符串,与portlet.xml注册中使用的相同。例如,日历portlet注册为:
<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>
您可以通过运行以下代码段来删除您网站上的日历portlet:
from plone.portlets.utils import unregisterPortletType
unregisterPortletType(site, 'portlets.Calendar')
您也可以使用GenericSetup portlets.xml文件在设置时删除portlet,只需列出portlet addview
参数并在元素中添加remove
属性:
<?xml version="1.0"?>
<portlets>
<portlet addview="portlets.Calendar" remove="true" />
</portlets>
感谢David Glick为我们找到那个。