Masquer un groupe de champs CCK en utilisant #states dans hook_form_alter ()?

9

J'ai un module personnalisé et j'essaie de masquer un groupe de champs CCK en utilisant "#states" lorsqu'un certain élément est sélectionné dans une liste déroulante de sélection.

J'ai essayé d'utiliser des états depuis hook_form_alter (), comme ceci:

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

Cela ne semble rien faire.

J'ai cherché à changer le poids de mon module selon divers sites comme http://proofgroup.com/blog/2008/dec/modifying_cck_fieldgroups_hook_form_alter .

mais toujours en vain. Je peux masquer tous les éléments du formulaire dans le groupe de champs en utilisant des états mais pas le groupe de champs lui-même. Est-ce que quelqu'un a une idée?

thepearson
la source
Pour les futurs téléspectateurs: @ andriy-malish ' est la bonne réponse .
UltraBob

Réponses:

11
/ **
 * Implémente hook_field_group_build_pre_render_alter.
 * /
fonction 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 (
        'visible' => tableau (
          ': input [name = "field_myfield [und]"]' => array ('checked' => TRUE),
        )
      );
      $ element ['group_myfieldgroup'] ['# id'] = 'group_myfieldgroup';
    }
  }
}

J'utilise ce crochet pour masquer mon groupe de champs. Il n'est visible que si la case field_myfieldest cochée.

Pour explorer la $elementvariable dans ce crochet, j'ai utilisé

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

au lieu de dpm().

J'espère que cela a aidé :)

Andriy Malish
la source
1

Les groupes de champs ne sont pas définis à la racine de $form. Il semble que vous ne devriez pas l'utiliser $form['group_mygroup'], mais $form['#fieldgroups']['group_mygroup'].

Andrew
la source
0

Vous pouvez consulter l' exemple de module pour voir comment ils masquent les ensembles de champs . Sur cette base, je pense que votre code devrait être:

$form['group_mygroup']['#states'] = array(
  'invisible' => array(
    ':input[name="field_trigger"]' => array('value' => 'hide'),
  ),
),
rocketeerbkw
la source
2
Merci pour votre suggestion. Bien que ce soit la même chose que mon code a déclaré légèrement différent. Je peux masquer les ensembles de champs si je déclare le formulaire et l'ensemble de champs à l'aide du FAPI. Mon problème est qu'il ne fonctionne pas avec les groupes de champs CCK dans hook_form_alter ().
thepearson