2011-07-12 16 views
5

Tenemos un requisito para que el tipo de contenido de destreza excluya del comportamiento de navegación, pero para el valor predeterminado del campo exclude_from_nav sea True. En el comportamiento plone.app.dexterity.behaviors.exclfromnav.IExcludeFromNavigation su valor predeterminado es False.¿Cómo se anula el valor predeterminado de un campo en un comportamiento de destreza en Plone?

Obviamente, podría crear mi propio comportamiento que copie IExcludeFromNavigation, excepto el valor predeterminado, pero me preguntaba si había una manera de hacerlo basándose en la reutilización de IExcludeFromNavigation. Tenemos otros tipos de contenido que usan IExcludeFromNavigation donde queremos que sea predeterminado a False.

Estamos usando Plone 4.1rc3 y destreza 1.0

Respuesta

3

esto he de trabajo utilizando un decorador plone.directives.form.

He agregado esto a uno de mis módulos de comportamiento.

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

también tienen lo siguiente en configure.zcml

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

<grok:grok package="." /> 

Gracias a Martin por la gran idea aunque su respuesta no acababa de resolver mi problema. Esto se siente como un truco para mí, una solución más elegante sería agradable.

+0

Otra opción sería registrar un formulario de adición personalizado y luego usar el 'formulario' (¿o es 'ver'?) discriminator a default_value() para especificar una anulación solo para ese formulario. – optilude

+0

Gracias, utilicé esto para mi escenario donde tengo dos tipos de objetos diferentes en el mismo contenedor que quiero excluir de manera predeterminada. El problema fue que no pude poner el mismo decorador en ambas definiciones de objeto o me daría problemas de conflicto de configuración. Terminé declarando en uno de los tipos :: return data.request.URL.endswith ('++ add ++ my_item_type') o data.request.URL.endswith ('++ add ++ my_other_type') –

+0

y como su ejemplo, tuve que eliminar el parámetro de contexto para que funcione en absoluto ... parece realmente hacky. –

5

Ver http://plone.org/products/dexterity/documentation/manual/developer-manual/advanced/defaults y http://pypi.python.org/pypi/plone.directives.form#value-adapters, pero básicamente:

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

Cheers, Martin

+0

Martin. Gracias por su respuesta, pero no es lo que busco. Puede que me equivoque, pero el "contexto" aquí parece ser el contenedor en el que está agregando el artículo y necesito una regla según el tipo de artículo que se agrega. Puedo ver un truco feo utilizando una prueba de 'data.request.URL' pero algo más elegante sería agradable – scarba05

Cuestiones relacionadas