Plone内容类型特定的Portlet分配

时间:2011-09-15 14:15:21

标签: python plone portlet

我正在为Plone 4开发内容类型,我想阻止它可以从其父对象继承的所有用户,组和上下文portlet。我对此处的文档非常困惑 - 在portlets.xml中,<blacklist/>似乎只能解决特定于路径的阻塞问题。 <assignment/>似乎就像我想要的那样,但它似乎太具体了 - 我不想管理我的内容类型上所有可能的portlet的分配。

我发现有一些提示可以自定义特定于内容类型的ILeftColumn和IRightColumn portlet管理器,但我找不到任何好的示例。有没有人有任何提示或建议?我觉得我错过了一些简单的东西。

2 个答案:

答案 0 :(得分:6)

为防止portlet获取并保持添加portlert的可能性,您可以在创建自动阻止采集的内容时添加事件监听器。

像这样:

    <subscriber
        for="my.package.interfaces.IMyContent
             zope.app.container.interfaces.IObjectAddedEvent"                 
handler=".subscribers.blockPortletsUpponMyContentCreation"
                  />

而不是这样:

from zope.component import getMultiAdapter, getUtility
from plone.portlets.interfaces import IPortletManager
from plone.portlets.interfaces import ILocalPortletAssignmentManager
from plone.portlets.constants import USER_CATEGORY
from plone.portlets.constants import GROUP_CATEGORY
from plone.portlets.constants import CONTENT_TYPE_CATEGORY
from plone.portlets.constants import CONTEXT_CATEGORY

def blockPortletsUpponMyContentCreation(mycontent, event):
    for manager_name in ('plone.leftcolumn','plone.rightcolumn'):
        manager = getUtility(IPortletManager, name=manager_name)
        assignable = getMultiAdapter((mycontent, manager,), ILocalPortletAssignmentManager)
        for category in (GROUP_CATEGORY, CONTENT_TYPE_CATEGORY,CONTEXT_CATEGORY,USER_CATEGORY):
            assignable.setBlacklistStatus(category, 1)

注意:此代码的灵感来自plone.app.portlet manage view

编辑19/08/2011:@will在我未经测试的代码中包含修复内容...所以现在已经过测试

答案 1 :(得分:1)

通过Sitesetup(controlpanel)在网站上实现对您的portaltype的分配 - &gt;类型 - &gt; “管理分配给此内容类型的portlet”。

然后通过ZMI导出配置 - &gt; portal_setup - &gt; Export-Tab - &gt;选择'Portlets' - &gt;点击底部的“导出”。

提取types / YourType.xml文件并复制包的profiles / default / types / YourType.xml中的相关部分。