lunes, 18 de enero de 2010

Vocabularios / Select Box dinámicos

0 comentarios
 
Para configurar un select Box que depende de las entradas de otro select box tenemos accesible una funcion javascript , loadSelectValues

Ejemplo : Tenemos el campo-select box 'area' y un segundo campo-select box, 'proceso' , con opciones que dependen de lo que se haya seleccionado previamente en el campo 'Area'

Para configurarlo

- Creamos los 2 campos normalmente desde la edición de patrones
- Una vez creados, vamos al zmi (portal_layouts/layout_en_cuestion)

Campo area:
- Lo único que modificamos es la prpiedad "On change javascript action" , y escribimos lo siguiente : loadSelectValues(this.value, 'getProcesosPorArea', 'widget__proceso')

donde getProcesosPorArea es el nombre de un python script que crearemos debajo de portal_skins/custom, i 'widget__proceso' es el nombre del widget del cual depende. Así de simple

el contenido del script es el siguiente:

voc = container.portal_vocabularies['kmkey_nc_proveedores_proceso']
result = []
for key in voc.keys():
if key.split('#')[0] == str(id):
result.append({'key':key, 'value':voc[key]})
return result


Donde modificamos únicamente el nombre del vocabulario, el del campo dependiente, que obtenemos mirando la configuración de su widget asociado

Importante : En el campo 'Parameter list' del script debe indicarse 'id', para que acepte el valor como entrada

Lo único que nos queda, es configurar correctamente los valores de cada uno de los vocabularios.

Para vocabulario Area :
A1 --> Area 1
A2 --> Area 2
etc..

Para vocabulario Fuente
A1#1 --> Area 1.1
A1#2 --> Area 1.2
...
A2#1 --> Area 2.1

....

Como véis, la técnica se basa en utilizar el prefijo que hay antes del separador de campos '#'

Leave a Reply