在plone中默认阻止上下文portlet

在plone中默认阻止上下文portlet,portlet,plone,Portlet,Plone,我有一个定制的portlet管理器,我希望在默认情况下黑名单(aka block)上下文(aka parent)portlet。我发现了一些方法,但它们要么需要一个特定的位置(因此不是站点范围),要么只有在定义portlet管理器的不同包中(setuphanders.py在导入portlet.xml之前运行,因此portlet管理器还不存在),而不是运行器时才起作用 我真正想做的是在portlets.xml中使用genericSetup黑名单语法,并将“*”用于如下位置: <blackli

我有一个定制的portlet管理器,我希望在默认情况下黑名单(aka block)上下文(aka parent)portlet。我发现了一些方法,但它们要么需要一个特定的位置(因此不是站点范围),要么只有在定义portlet管理器的不同包中(setuphanders.py在导入portlet.xml之前运行,因此portlet管理器还不存在),而不是运行器时才起作用

我真正想做的是在portlets.xml中使用genericSetup黑名单语法,并将“*”用于如下位置:

<blacklist
  manager="custom.portletmanager"
  location="*"
  category="context"
  status="block"
  />


但是,唉,这似乎不起作用。有什么建议吗?

也许您可以覆盖portlet上的某些权限(可能在overrides.zcml中),需要一个不存在的权限


或者,还有一个
z3c.unconfigure
包,它可能能够完全注销portlet。

晚注册可能比不注册好:在PortletManager的uu init中使用它将继承的默认值设置为false,但您仍然可以覆盖它。(这种方法不适用于其他两种情况,这两种情况已经有了三元语义“block/show/inherit”,因此我们无法区分默认值和用户设置值,并且每次都会调用uu init)

def __init__(self, context, request, view, manager):

    ColumnPortletManagerRenderer.__init__(self, context, request, view, manager)
    assignable = getMultiAdapter((self.context, self.manager,), 
                                 ILocalPortletAssignmentManager)
    if assignable.getBlacklistStatus(CONTEXT_CATEGORY)==None:
        # hack: for CONTEXT, it's a binary flag.
        # Nevertheless, getBlacklistStatus returns ternary True/False/None.
        # None should be the creation default.
        assignable.setBlacklistStatus(CONTEXT_CATEGORY, True)