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

Mik*_*maa 7 portlet plone

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

Mar*_*ers 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.
    """
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

因此,您可以通过运行以下代码段从您的站点中删除日历portlet:

from plone.portlets.utils import unregisterPortletType
unregisterPortletType(site, 'portlets.Calendar')
Run Code Online (Sandbox Code Playgroud)

您还可以使用GenericSetup portlets.xml文件在设置时删除portlet,只需列出portlets addview参数并向remove元素添加属性:

<?xml version="1.0"?>
<portlets>
  <portlet addview="portlets.Calendar" remove="true" />
</portlets>
Run Code Online (Sandbox Code Playgroud)

感谢David Glick为我们找到了那个.

  • 如果我正确读取代码,您还可以通过portlets.xml中的GenericSetup取消注册portlet类型; 例如<portlet addview ="portlets.Calendar"remove ="true"/> (5认同)