Eine CCK-Feldgruppe mit #states in hook_form_alter () ausblenden?

9

Ich habe ein benutzerdefiniertes Modul und versuche, eine CCK-Feldgruppe mit "#states" auszublenden, wenn ein bestimmtes Element in einer Dropdown-Auswahlliste ausgewählt ist.

Ich habe versucht, Zustände aus hook_form_alter () zu verwenden, wie folgt:

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

Das scheint nichts zu bewirken.

Ich habe versucht, das Gewicht meines Moduls gemäß verschiedenen Websites wie http://proofgroup.com/blog/2008/dec/modifying_cck_fieldgroups_hook_form_alter zu ändern .

aber immer noch ohne Erfolg. Ich kann alle Formularelemente innerhalb der Feldgruppe mithilfe von Status ausblenden, jedoch nicht anhand der Feldgruppe selbst. Hat jemand eine Idee?

thepearson
quelle
Für zukünftige Zuschauer: Die Antwort von @ andriy-malish ist die richtige.
UltraBob

Antworten:

11
/ **
 * Implementiert hook_field_group_build_pre_render_alter.
 * /
Funktion 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 (
        'sichtbar' => Array (
          ': input [name = "field_myfield [und]"]' => array ('checked' => TRUE),
        )
      );
      $ element ['group_myfieldgroup'] ['# id'] = 'group_myfieldgroup';
    }}
  }}
}}

Ich benutze diesen Haken, um meine Feldgruppe auszublenden. Es ist nur sichtbar, wenn das Kontrollkästchen aktiviert field_myfieldist.

Um die $elementVariablen in diesem Hook zu untersuchen, habe ich verwendet

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

statt dpm().

Hoffe es hat geholfen :)

Andriy Malish
quelle
1

Feldgruppen sind nicht im Stammverzeichnis von definiert $form. Es scheint, Sie sollten nicht verwenden $form['group_mygroup'], aber $form['#fieldgroups']['group_mygroup'].

Andrew
quelle
0

Sie können sich das Beispielmodul ansehen, um zu sehen, wie Feldsätze ausgeblendet werden . Basierend darauf denke ich, dass Ihr Code sein sollte:

$form['group_mygroup']['#states'] = array(
  'invisible' => array(
    ':input[name="field_trigger"]' => array('value' => 'hide'),
  ),
),
rocketeerbkw
quelle
2
Danke für Ihren Vorschlag. Obwohl das das gleiche ist wie mein Code, der nur geringfügig anders deklariert wurde. Ich kann Feldsätze ausblenden, wenn ich das Formular und den Feldsatz über das FAPI deklariere. Mein Problem ist, dass es nicht mit CCK-Feldgruppen in hook_form_alter () funktioniert.
Thepearson