2011-08-16 11 views
5

plone.orgのdocumentationをフォーラムで使用すると、私はPlone 4.0.8で自分のコンテンツの下にカスタムポートレットマネージャーを取得できました。目標は、ダッシュボードのように配置されたコンテンツの下に4つのカスタムマネージャーを置くことです。在庫ポートレット(plone.app.portletsから)を私のカスタムポートレットマネージャーに追加するにはどうすればよいですか?

とにかく、私のマネージャーは静的ポートレットとコレクションポートレットを追加することしかできません。コードを見渡したところ、システムは「新しいポートレットを追加する」ドロップダウンをポピュレートすると、すべてのポートレットをループします。次に、各ポートレットの 'for_'属性チェックをループして、インターフェースがself-portlet managerによって提供されているかどうかを確認します。

def getAddablePortletTypes(self): 
    addable = [] 
    for p in getUtilitiesFor(IPortletType): 
     # BBB - first condition, because starting with Plone 3.1                                 
     #every p[1].for_ should be a list                                       
     if not isinstance(p[1].for_, list): 
      logger.warning("Deprecation Warning ..." % p[1].addview) 
      if p[1].for_ is None or p[1].for_.providedBy(self): 
       addable.append(p[1]) 
     elif [i for i in p[1].for_ if i.providedBy(self)]: 
      addable.append(p[1]) 
    return addable 

各ポートレットの「for_」インターフェースのリストにマネージャーのインターフェースを追加するにはどうすればよいですか?

+2

私は 'クラスIBottomPortletManager(IPortletManager)' に 'クラスIBottomPortletManager(IPortletManager、IColumnが)' IColumnがplone.app.portletsで定義されているので、これらのポートレットがすでに登録されているから、私のマネージャのインターフェイスを変更IColumnを提供するマネージャー。 これはこれを行う理想的な方法ですか? – Travv15

答えて

6

commentはおそらくこれを行うための最良の方法です。ここで重要な点は、ポートレット自体がコンテキスト、レイヤーなどのための他のインターフェースの中で、ポートレット・マネージャー・インターフェースに登録されていることです。これを行う別の方法は、例えばprofiles/default/portlets.xmlに追加の登録を追加することですあなたが追加可能たいポートレットごとに、ポートレット・マネージャー・インターフェースにファイル:あなたは、柱状ポートレットマネージャを作成しているように聞こえるので、

<portlet 
    addview="portlets.News" 
    title="News" 
    description="A portlet which can render a listing of recent news" 
    i18n:attributes="title; 
        description" 
    > 
    <for interface="your.package.IYourPortletManager" /> 
</portlet> 

あなたの方法は、しかし、おそらく最高です。ただし、IColumnはすでにサブクラス化しているので、基本クラスからIPortletManagerを削除できます。

+0

好奇心を要して、私のマネージャーインターフェイスに登録を追加するにはどうしたらいいですか?私がベースとしてIPortletManagerだけを使用しているとしますが、Newsポートレットも必要です。ニュースポートレット登録にマネージャーインターフェースを追加するにはどうすればよいですか?私はplone.app.portletsで、これらのポートレットがどのように運がなくてもインタフェースを登録する方法を見つけようとしています。 – Travv15

+0

私の答えを例で更新しました。 –

関連する問題