2011-07-12 24 views
5

El becerisi içerik türünün gezinme davranışından hariç tutulması için bir gereksinimimiz var ama exclude_from_nav alanının varsayılan değeri True olmalıdır. plone.app.dexterity.behaviors.exclfromnav.IExcludeFromNavigation davranışında varsayılan değer False olur.Bir alanın varsayılan değerini Plone'daki el becerisi davranışında nasıl geçersiz kılarsınız?

Açıkçası, IExcludeFromNavigation'u varsayılan değer dışında kopyalarken kendi davranışlarımı oluşturabilirdim, ancak bunu IExcludeFromNavigation yeniden kullanmaya dayalı olarak yapmanın bir yolu olup olmadığını merak ediyordum. IExcludeFromNavigation'u kullanan diğer içerik türlerimiz var. Burada varsayılan olarak False. Biz temelde http://plone.org/products/dexterity/documentation/manual/developer-manual/advanced/defaults ve http://pypi.python.org/pypi/plone.directives.form#value-adapters ama bakın Plone'un 4.1rc3 ve Dexterity 1.0

cevap

3

Bunun plone.directives.form yönetmeni kullanarak çalışma var.

Bunu davranış modüllerimden birine ekledim.

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') 

Ben de onun cevabı oldukça benim sorunu çözmek vermedi rağmen configure.zcml büyük ipucu Martin

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

<grok:grok package="." /> 

Teşekkür şu var. Bu benim için bir kesik gibi geliyor - daha zarif bir çözüm güzel olurdu.

+0

Başka bir seçenek, özel bir form eklemek ve sonra' formu '(veya' görünüm 'kullanacaksınız)?) yalnızca bu form için bir geçersiz kılma belirtmek üzere default_value() öğesine ayrımcı. – optilude

+0

Teşekkürler, bunu, varsayılan kapsayıcıda hariç tutmak istediğiniz aynı kapsayıcıda iki farklı nesne türüne sahip olduğum senaryo için kullandım. Sorun aynı dekoratörü her iki nesne tanımına da koyamazdım ya da config çakışma şikayetlerini alırdım. Ben sadece türlerinden birini beyan ettim: data.request.URL.endswith ('++ add ++ my_item_type') veya data.request.URL.endswith ('++ add ++ my_other_type') –

+0

ve Örneğiniz gibi bağlam parametresini tümüyle çalışması için kaldırmam gerekiyordu ... gerçekten de hacky gibi görünüyor. –

5

kullandığınız

:

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

Cheers, Martin

+0

Martin. Cevabınız için teşekkürler, ama peşindeyim tam olarak değil. Yanılıyor olabilirim ama 'bağlam' burada öğeyi eklediğiniz kapsayıcı gibi görünüyor ve eklenen öğenin türüne göre bir kurala ihtiyacım var. Ben bir 'data.request.URL 'testi kullanarak çirkin bir hack görebiliyorum ama daha zarif bir şey güzel olurdu – scarba05