2011-09-15 9 views
5

Plone 4のコンテンツタイプを開発しています。親オブジェクトから継承するすべてのユーザー、グループ、およびコンテキストポートレットをブロックしたいと考えています。私は、この時点のドキュメント、portlets.xmlで完全に混乱しています。<blacklist/>は、パス固有のブロッキングにしか対応していないようです。 <assignment/>は私が望むように思えますが、あまりにも具体的すぎるようです。私はコンテンツタイプ上のすべての可能なポートレットの割り当てを管理したくありません。Ploneコンテンツタイプ別のポートレット割り当て

コンテンツタイプに固有のILeftColumnおよびIRightColumnポートレットマネージャをカスタマイズしていることがわかりましたが、良い例は見つかりません。誰にもヒントや提案はありますか?シンプルなものを逃しているような気がする。

答えて

6

ポートレットの取得を防止し、portlertを追加する可能性を維持するために、取得を自動的にブロックするコンテンツの作成時にイベントリスナーを追加できます。

<subscriber 
     for="my.package.interfaces.IMyContent 
      zope.app.container.interfaces.IObjectAddedEvent"     
handler=".subscribers.blockPortletsUpponMyContentCreation" 
        /> 

とこれを行うより:

from zope.component import getMultiAdapter, getUtility 
from plone.portlets.interfaces import IPortletManager 
from plone.portlets.interfaces import ILocalPortletAssignmentManager 
from plone.portlets.constants import USER_CATEGORY 
from plone.portlets.constants import GROUP_CATEGORY 
from plone.portlets.constants import CONTENT_TYPE_CATEGORY 
from plone.portlets.constants import CONTEXT_CATEGORY 

def blockPortletsUpponMyContentCreation(mycontent, event): 
    for manager_name in ('plone.leftcolumn','plone.rightcolumn'): 
     manager = getUtility(IPortletManager, name=manager_name) 
     assignable = getMultiAdapter((mycontent, manager,), ILocalPortletAssignmentManager) 
     for category in (GROUP_CATEGORY, CONTENT_TYPE_CATEGORY,CONTEXT_CATEGORY,USER_CATEGORY): 
      assignable.setBlacklistStatus(category, 1) 

注:このコードはplone.app.portlet manage view

編集19/08/2011に触発さ:提案されているよう修正を含むこのよう

私のテストされていないコードの@willによって...今すぐテストされました

+0

ありがとう!これはまさに私がやりたいことです。将来のユーザー割り当て機能を維持しながら、既存のポートレットをブロックします。私は、portlets.xmlで何かをしようとしていたので、加入者が私に起こっていないと思った。 – Will

+1

後継のために、上記のコードを修正して動作させる必要があります。 ZCMLでは、 'factory'属性は' handler'でなければなりません。マネージャ名はそれぞれ 'IPortletManager'マネージャと' getUtility() 'で一致させる必要があります。 – Will

+0

@あなたはあなたの質問の答えとしてこの答えをマークできますか? – toutpt

1

Sitesetup(controlpanel) - >タイプ - > "このコンテンツタイプに割り当てられたポートレットを管理する"を使用して、portaltypeへの割り当てをサイトで実行します。

次に、ZMI - > portal_setup - >エクスポート - タブ - > 'ポートレット' - >下の「エクスポート」をクリックして設定をエクスポートします。

types/YourType.xml-fileを抽出し、パッケージのプロファイル/ default/types/YourType.xmlに関連する部分をコピーします。

+0

これは、あなたがbloc親ポートレット。あなたはそのように確信していますか? –

+0

ああ、それはブロックすることはできません、私はあなたの2番目の段落を参照していた。あなたは完全にprtletsをブロックしたくないが、それでも新しいものを割り当てることはできますか? – ida

関連する問題