在Plone中禁用站点范围内的portlet类型

时间:2011-05-05 12:30:08

标签: portlet plone

在Plone 4.1中禁用站点范围内的portlet类型的最佳方法是什么?默认设置提供~10个portlet类型,但站点用户只有少数用例(静态文本,新闻)。

1 个答案:

答案 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为我们找到那个。