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?


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


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'].


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.