Ocultar um grupo de campos CCK usando #states em hook_form_alter ()?

9

Eu tenho um módulo personalizado e estou tentando ocultar um grupo de campos CCK usando "#states" quando um determinado item é selecionado em uma lista suspensa de seleção.

Eu tentei usar estados de dentro de hook_form_alter (), assim:

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

Isso parece não fazer nada.

Procurei alterar o peso do meu módulo de acordo com vários sites como http://proofgroup.com/blog/2008/dec/modifying_cck_fieldgroups_hook_form_alter .

mas ainda sem sucesso. Posso ocultar todos os elementos do formulário no grupo de campos usando estados, mas não o próprio grupo de campos. Alguém tem alguma ideia?

thepearson
fonte
Para futuros telespectadores: a resposta @ andriy-malish ' é a correta.
UltraBob 13/03/19

Respostas:

11
/ **
 * Implementa hook_field_group_build_pre_render_alter.
 * /
função mymodule_field_group_build_pre_render_alter (& $ element) {
  if (isset ($ elemento ['# form_id'])) {
    if ($ element ['# form_id'] == 'mynodetype_node_form') {
      $ elemento ['group_myfieldgroup'] ['# states'] = matriz (
        'visible' => matriz (
          ': input [name = "field_myfield [und]"]' => array ('marcado' => TRUE),
        )
      );
      $ elemento ['group_myfieldgroup'] ['# id'] = 'group_myfieldgroup';
    }
  }
}

Eu uso esse gancho para ocultar meu grupo de campos. É visível apenas se a caixa de seleção field_myfieldestiver marcada.

Para explorar a $elementvariável neste gancho, usei

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

em vez de dpm().

Espero que tenha ajudado :)

Andriy Malish
fonte
1

Grupos de campo não são definidos na raiz de $form. Parece que você não deve usar $form['group_mygroup'], mas $form['#fieldgroups']['group_mygroup'].

Andrew
fonte
0

Você pode ver o módulo de exemplo para ver como eles ocultam conjuntos de campos . Com base nisso, acho que seu código deve ser:

$form['group_mygroup']['#states'] = array(
  'invisible' => array(
    ':input[name="field_trigger"]' => array('value' => 'hide'),
  ),
),
rocketeerbkw
fonte
2
Obrigado por sua sugestão. Embora seja o mesmo que meu código declarado apenas ligeiramente diferente. Posso ocultar conjuntos de campos se declarar o formulário e o conjunto de campos usando a FAPI. Meu problema é que ele não funciona com grupos de campos CCK em hook_form_alter ().
5118 thepearson