Ukryć grupę pól CCK za pomocą #states w hook_form_alter ()?

9

Mam niestandardowy moduł i próbuję ukryć grupę polową CCK za pomocą „#states”, gdy określony element zostanie wybrany z rozwijanej listy wyboru.

Próbowałem użyć stanów z funkcji hook_form_alter (), tak jak poniżej:

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

To wydaje się nic nie robić.

Patrzyłem na zmianę wagi mojego modułu w różnych witrynach, takich jak http://proofgroup.com/blog/2008/dec/modifying_cck_fieldgroups_hook_form_alter .

ale wciąż bezskutecznie. Mogę ukryć wszystkie elementy formularza w grupie pól, używając stanów, ale nie samej grupy pól. Czy ktokolwiek ma jakiś pomysł?

thepearson
źródło
Dla przyszłych widzów: @ andriy-malish 'odpowiedź jest poprawna.
UltraBob,

Odpowiedzi:

11
/ **
 * Implementuje hook_field_group_build_pre_render_alter.
 * /
funkcja mymodule_field_group_build_pre_render_alter (& $ element) {
  if (isset ($ element ['# form_id'])) {
    if ($ element ['# form_id'] == 'mynodetype_node_form') {
      $ element ['group_myfieldgroup'] ['# states'] = tablica (
        „visible” => tablica (
          ': input [name = "field_myfield [und]"]' => tablica ('zaznaczone' => PRAWDA),
        )
      );
      $ element ['group_myfieldgroup'] ['# id'] = 'group_myfieldgroup';
    }
  }
}

Używam tego haka, aby ukryć moją grupę polową. Jest widoczny tylko wtedy, gdy pole wyboru field_myfieldjest zaznaczone.

Do zbadania $elementzmiennej w tym haku użyłem

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

zamiast dpm().

Mam nadzieję, że to pomogło :)

Andriy Malish
źródło
1

Grupy pól nie są zdefiniowane w katalogu głównym $form. Wydaje się, że nie powinieneś używać $form['group_mygroup'], ale $form['#fieldgroups']['group_mygroup'].

Andrzej
źródło
0

Możesz spojrzeć na moduł przykładowy, aby zobaczyć, jak ukrywają zestawy pól . Na tej podstawie uważam, że twój kod powinien być:

$form['group_mygroup']['#states'] = array(
  'invisible' => array(
    ':input[name="field_trigger"]' => array('value' => 'hide'),
  ),
),
rocketeerbkw
źródło
2
Dzięki za Twoją sugestię. Chociaż to jest to samo, co mój kod zadeklarował tylko nieco inny. Mogę ukryć zestawy pól, jeśli zadeklaruję formularz i zestaw pól za pomocą interfejsu FAPI. Mój problem polega na tym, że nie działa z grupami pól CCK w hook_form_alter ().
thepearson,