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?


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


1

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


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.