2010-08-24 102 views
0

我有一個自定義portlet管理器,並且我想默認情況下將黑名單(aka block)上下文(aka parent)portlet。我發現了一些方法,但是它們要麼需要一個特定的位置(所以不需要在網站範圍內),要麼只有當我在一個不同的包中定義了Portlet管理器的位置時纔會工作(在portlets.xml之前運行setuphanders.py導入,因此Portlet管理器尚不存在),這不是跑步者。默認情況下在plone中阻塞上下文portlet

我真正想要做的是使用portlets.xml的genericSetup黑名單語法用「*」像這樣的位置:

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

但是,唉,也似乎並不工作。有什麼建議麼?

回答

0

也許你可以重寫portlet的一些權限(可能在overrides.zcml中),需要一個不存在的權限?

另外,還有一個z3c.unconfigure包可能能夠完全取消註冊portlet。

0

比從未更好的延遲,也許:在你的PortletManager中使用__init _ _設置默認爲繼承爲false,但你仍然可以覆蓋TTW。 (這種方法並沒有擴展到其他兩個方面,它們已經具有「block/show/inherit」的三元語​​義,所以我們無法區分默認值和用戶設置值,並且每次都調用__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)