2011-07-12 5 views
5

巧妙なコンテンツタイプがナビゲーション動作から除外されるが、exclude_from_navフィールドのデフォルト値はTrueであるという要件があります。振る舞いでは、plone.app.dexterity.behaviors.exclfromnav.IExcludeFromNavigationはデフォルトでFalseになります。Ploneの巧妙な動作のフィールドのデフォルト値をどのように変更するのですか?

明らかに私はIExcludeFromNavigationを除いてデフォルト値をコピーする自分の動作を作成することができましたが、再利用に基づいてこれを行う方法があるかどうか疑問に思っていました。IExcludeFromNavigationIExcludeFromNavigationを使用するその他のコンテンツタイプがあります。デフォルトではFalseに設定します。私たちは、基本的にhttp://plone.org/products/dexterity/documentation/manual/developer-manual/advanced/defaultshttp://pypi.python.org/pypi/plone.directives.form#value-adaptersが、参照のPlone 4.1rc3と敏捷1.0

答えて

3

私はこのplone.directives.formデコレータを使用して作業してきました。

これを自分の行動モジュールの1つに追加しました。

from plone.directives.form import default_value 

@default_value(field = IExcludeFromNavigation['exclude_from_nav']) 
def excludeFromNavDefaultValue(data): 
    return data.request.URL.endswith('++add++my_item_type') 

私はまたのconfigure.zcml

<include package="plone.directives.form" file="meta.zcml" /> 
<include package="plone.directives.form" /> 

<grok:grok package="." /> 

に彼の答えは非常に私の問題を解決しなかったが、大きな手がかりのためのマーティンのおかげで、次があります。これはちょっとしたハックのような感じです。より洗練されたソリューションがいいですね。

+0

もう一つのオプションは、カスタムフォームを登録してから 'フォーム'を使うことです(または 'ビュー'ですか? )discriminatorをdefault_value()に設定して、そのフォームのオーバーライドのみを指定します。 – optilude

+0

ありがとう、私は私がデフォルトで除外したい同じコンテナに2つの異なるオブジェクトタイプを持っている私のシナリオでこれを使用しました。問題は、私は両方のオブジェクト定義に同じデコレータを置くことができなかったか、私は設定の競合の苦情を得るだろう。私はちょうどタイプのうちの1つで宣言しました:return data.request.URL.endswith( '++ add ++ my_item_type')またはdata.request.URL.endswith( '++ add ++ my_other_type') –

+0

とあなたの例のように、私はコンテキストパラメータを削除する必要がありました。実際にはうまくいかないようです。 –

5

を使用している

@form.default_value(field=IExcludeFromNavigation['exclude_from_nav'], context=IMyType) 
def excludeFromNavDefaultValue(data): 
    return True 

乾杯を、 マーティン

+0

Martin。あなたの答えをありがとうが、それは私が何をしているかはかなりありません。私は間違っているかもしれませんが、ここでは 'context'はアイテムを追加するコンテナのようですが、追加されるアイテムのタイプに基づいてルールが必要です。 'data.request.URL'のテストを使って醜いハックを見ることができますが、よりエレガントなものが良いでしょう – scarba05

関連する問題