我正在为Plone 4开发内容类型,我想阻止它可以从其父对象继承的所有用户,组和上下文portlet。我对此处的文档非常困惑 - 在portlets.xml中,<blacklist/>
似乎只能解决特定于路径的阻塞问题。 <assignment/>
似乎就像我想要的那样,但它似乎太具体了 - 我不想管理我的内容类型上所有可能的portlet的分配。
我发现有一些提示可以自定义特定于内容类型的ILeftColumn和IRightColumn portlet管理器,但我找不到任何好的示例。有没有人有任何提示或建议?我觉得我错过了一些简单的东西。
答案 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中的相关部分。