0

カスタムポートレットマネージャがあり、デフォルトで(ブロック)コンテキスト(親)ポートレットをブラックリストに登録したいと思います。いくつかの方法を見つけましたが、それらは特定の場所を必要とする(サイト全体ではない)か、ポートレットマネージャが定義されている場所とは異なるパッケージにいる場合にのみ機能します(setuphanders.pyはportlets.xmlが実行される前に実行されます)インポートされたため、ポートレットマネージャはまだ存在していません)。これはランナーではありません。

私が本当にやりたいのは、portlets.xmlのgenericSetupブラックリスト構文を次のような場所に「*」を付けて使用することです。

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

しかし、残念ながら、それはうまくいかないようです。助言がありますか?

4

2 に答える 2

0

おそらく、ポートレット (おそらく overrides.zcml 内) のパーミッションを上書きして、存在しないパーミッションを要求することができますか?

または、z3c.unconfigureポートレットを完全に登録解除できるパッケージがあります。

于 2010-09-01T07:50:56.187 に答える
0

これを PortletManager の __init _ _ で使用すると、継承のデフォルトが false に設定されますが、TTW を上書きすることはできます。(このアプローチは、「ブロック/表示/継承」の 3 項セマンティックを既に持っている他の 2 つのものには適用されないため、デフォルト値とユーザー設定値を区別できず、毎回 __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 に答える