0

我有一个自定义的 portlet 管理器,我想默认将(又名块)上下文(又名父级)portlet 列入黑名单。我找到了几种方法,但它们要么需要特定的位置(因此不是整个站点),要么仅在我位于与定义 portlet 管理器的位置不同的包中时才有效(setuphanders.py 在 portlets.xml 之前运行)导入,因此 portlet 管理器还不存在),它不是运行器。

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

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

但是,唉,这似乎行不通。有什么建议么?

4

2 回答 2

0

也许迟到总比没有好:在 PortletManager 的 __init __ 中使用它会将默认继承设置为 false,但您仍然可以覆盖它 TTW。(这种方法没有扩展到其他两个东西,它们已经具有“块/显示/继承”的三元语​​义,因此我们无法区分默认值和用户设置的值,并且每次都会调用 __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)
于 2010-11-26T21:40:16.043 回答
0

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

或者,有一个z3c.unconfigure包可以完全取消注册 portlet。

于 2010-09-01T07:50:56.187 回答