¿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?

thepearson
fuente
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 :)

Andriy Malish
fuente
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'].

Andrés
fuente
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'),
  ),
),
rocketeerbkw
fuente
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