Nascondere un gruppo di campi CCK utilizzando #states in hook_form_alter ()?


9

Ho un modulo personalizzato e sto cercando di nascondere un fieldgroup CCK utilizzando "#states" quando un determinato elemento viene selezionato in un elenco di selezione a discesa.

Ho provato a usare gli stati all'interno di hook_form_alter (), in questo modo:

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

Questo non sembra fare nulla.

Ho cercato di cambiare il peso del mio modulo come per vari siti come http://proofgroup.com/blog/2008/dec/modifying_cck_fieldgroups_hook_form_alter .

ma ancora inutilmente. Posso nascondere tutti gli elementi del modulo all'interno del fieldgroup usando gli stati ma non il gruppo di campi stesso. Qualcuno ha qualche idea?


Per i futuri spettatori: la risposta di @ andriy-malish è quella corretta.
UltraBob

Risposte:


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

Uso questo hook per nascondere il mio gruppo di campi. È visibile solo se la casella di field_myfieldcontrollo è selezionata.

Per esplorare la $elementvariabile in questo hook ho usato

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

invece di dpm().

Spero che abbia aiutato :)


1

I gruppi di campi non sono definiti nella radice di $form. Sembra che non dovresti usare $form['group_mygroup'], ma $form['#fieldgroups']['group_mygroup'].


0

Puoi guardare il modulo di esempio per vedere come nascondono i set di campi . Sulla base di ciò penso che il tuo codice dovrebbe essere:

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

2
Grazie per il tuo suggerimento Anche se è lo stesso del mio codice dichiarato solo leggermente diverso. Posso nascondere i set di campi se dichiaro il modulo e il set di campi utilizzando la FAPI. Il mio problema è che non funziona con i gruppi di campi CCK all'interno di hook_form_alter ().
thepearson
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.