Wil*_*ill 5 python portlet plone
我正在为Plone 4开发一个内容类型,我想阻止它可以从其父对象继承的所有用户,组和上下文portlet.我对此处的文档 - 在portlets.xml中完全感到困惑,<blacklist/>似乎只能解决特定于路径的阻塞问题.<assignment/>看起来像我想要的,但它似乎太具体了 - 我不想管理我的内容类型上所有可能的portlet的分配.
有一些提示我发现自定义特定于内容类型的ILeftColumn和IRightColumn portlet管理器,但我找不到任何好的例子.有没有人有任何提示或建议?我觉得我错过了一些简单的东西.
为了防止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建议的修复...所以现在进行了测试