2010-06-16 3 views
5

J'utilise Ctools Dependency pour rendre un fieldset hideable. Cela fait partie de mon code:Drupal: Comment faire en sorte qu'un fieldset dépende de CTools

$form['profile-status'] = array(
    '#type' => 'radios', 
    '#title' => '', 
    '#options' => array(
     'new' => t('Create a new profile.'), 
     'select' => t('Use an existing profile.'), 
    ), 
); 

$form['select'] = array(
    '#type' => 'select', 
    '#title' => t('Select a profile'), 
    '#options' => $options, 
    '#process' => array('ctools_dependent_process'), 
    '#dependency' => array('radio:profile-status' => array('select')), 
); 

$form['profile-properties'] = array(
    '#type' => 'fieldset', 
    '#title' => t('View the profile'), 
    '#process' => array('ctools_dependent_process'), 
    '#dependency' => array('radio:profile-status' => array('select')), 
    '#input' => true, 
); 

Dans extrait ci-dessus, il y a deux éléments, une sélection et un fieldset. Les deux ont des paramètres #process et #dependency et tous deux pointent vers un champ pour la valeur dépendante. Le problème est que des éléments comme select ou textfield peuvent être cachés facilement mais cela ne fonctionne pas pour fieldset. Dans this page de demande de soutien, le créateur CTools a mentionné que '#input' => true est un travail autour. Comme vous le voyez, je l'ai ajouté au code, mais ça ne marche pas aussi bien.

Avez-vous une suggestion?

Répondre

5

J'ai trouvé ma réponse après avoir lu la source de CTools dépendante. Fieldset doit changer comme ceci:

$form['profile-properties'] = array(
    '#type' => 'fieldset', 
    '#title' => t('View the profile'), 
    '#process' => array('ctools_dependent_process'), 
    '#dependency' => array('radio:profile-status' => array('select')), 
    '#input' => true, 

    '#id' => 'my-fs-id', 
    '#prefix' => '<div id="my-fs-id-wrapper">', 
    '#suffix' => '</div>', 
); 

D'abord un ID doit être défini pour le fieldset. Ensuite, il doit être enveloppé dans un tag DIV. ID de la DIV doit être l'ID de feildset avec le suffixe '-wrapper'.

1

maintenant (février 2013) L'utilisation est:

$form['foo_or_bar'] = array(
    '#title' => 'Foo or Bar', 
    '#type' => 'radios', 
    '#options' => array(
     "foo" => "Foo", 
     "bar" => "Bar" 
    ), 
    '#default_value' => "foo", 
); 

$form['react_on_foo'] = array(
    '#type' => 'fieldset', 
    '#title' => t('Foo fieldset'), 
    '#dependency' => array('radio:foo_or_bar' => array('foo')), 
); 

$form['react_on_foo']['dummy_for_foo_fieldset'] = array(
    '#title' => t('Dummy for FOO fieldset'), 
    '#type' => 'textfield', 
); 


$form['react_on_bar'] = array(
    '#type' => 'fieldset', 
    '#title' => t('Bar fieldset'), 
    '#dependency' => array('radio:foo_or_bar' => array('bar')), 
); 

$form['react_on_bar']['dummy_for_bar_fieldset'] = array(
    '#title' => t('Dummy for BAR fieldset'), 
    '#type' => 'textfield', 
); 

Et #process est plus nécessaire.

Questions connexes