¿Ocultar un grupo de campo CCK usando #states en hook_form_alter ()?


9

Tengo un módulo personalizado e intento ocultar un grupo de campo CCK usando "#states" cuando se selecciona un determinado elemento en una lista de selección desplegable.

He intentado usar estados desde hook_form_alter (), así:

$form['group_mygroup']['#states']['invisible'] = array(
  ':input[name="field_trigger[' . LANGUAGE_NONE. ']"]' => array( 'value' => 'hide' ),
);

Esto no parece hacer nada.

He buscado cambiar el peso de mi módulo según varios sitios como http://proofgroup.com/blog/2008/dec/modifying_cck_fieldgroups_hook_form_alter .

pero aún en vano. Puedo ocultar todos los elementos del formulario dentro del grupo de campos usando estados pero no el grupo de campos en sí. ¿Alguien tiene alguna idea?


Para futuros espectadores: la respuesta de @ andriy-malish es la correcta.
UltraBob

Respuestas:


11
/ **
 * Implementa hook_field_group_build_pre_render_alter.
 * /
función mymodule_field_group_build_pre_render_alter (& $ element) {
  if (isset ($ element ['# form_id'])) {
    if ($ element ['# form_id'] == 'mynodetype_node_form') {
      $ element ['group_myfieldgroup'] ['# states'] = array (
        'visible' => array (
          ': input [name = "field_myfield [und]"]' => array ('check' => TRUE),
        )
      );
      $ element ['group_myfieldgroup'] ['# id'] = 'group_myfieldgroup';
    }
  }
}

Yo uso este gancho para ocultar mi grupo de campo. Solo es visible si la casilla de verificación field_myfieldestá marcada.

Para explorar la $elementvariable en este gancho usé

die('<pre>'.print_r($element, 1).'</pre>');

en lugar de dpm().

Espero que haya ayudado :)


1

Los grupos de campo no están definidos en la raíz de $form. Parece que deberías usar no $form['group_mygroup'], pero $form['#fieldgroups']['group_mygroup'].


0

Puede mirar el módulo de ejemplo para ver cómo ocultan los conjuntos de campos . Basado en eso, creo que su código debería ser:

$form['group_mygroup']['#states'] = array(
  'invisible' => array(
    ':input[name="field_trigger"]' => array('value' => 'hide'),
  ),
),

2
Gracias por tu sugerencia. Aunque eso es lo mismo que mi código solo declaró un poco diferente. Puedo ocultar los conjuntos de campos si declaro el formulario y el conjunto de campos utilizando la FAPI. Mi problema es que no funciona con los grupos de campo CCK dentro de hook_form_alter ().
thepearson el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.