Plone内容类型特定的Portlet分配

Wil*_*ill 5 python portlet plone

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

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

Gia*_*oli 6

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

像这样:

    <subscriber
        for="my.package.interfaces.IMyContent
             zope.app.container.interfaces.IObjectAddedEvent"                 
handler=".subscribers.blockPortletsUpponMyContentCreation"
                  />
Run Code Online (Sandbox Code Playgroud)

而且这样做:

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

注意:此代码的灵感来自plone.app.portlet管理视图

编辑19/08/2011:在我未经测试的代码中包含了@will建议的修复...所以现在进行了测试