2010-06-16 2 views
5

Я использую зависимость Ctools, чтобы сделать набор полей скрытым. Это часть моего кода:Drupal: Как сделать зависящий от поля набор с помощью 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, 
); 

В фрагменте выше, Есть два элемента, один выбор и один набор полей. Оба имеют параметры #process и #dependency и оба указывают на одно поле для зависимого значения. Проблема заключается в том, что элементы, такие как select или текстовое поле, могут быть легко спрятаны, но это не работает для набора полей. В this странице запроса поддержки, создатель CTools отметил, что '#input' => true - это работа. Как вы видите, я добавил его в код, но он не работает.

Есть ли у вас какие-либо предложения?

ответ

5

Я нашел свой ответ после прочтения источника зависимости от CTools. Fieldset должен измениться следующим образом:

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

Сначала необходимо установить идентификатор для полевого набора. Затем он должен быть завернут в тег DIV. Идентификатор DIV должен быть идентификатором feildset с суффиксом '-wrapper'.

1

сейчас (февраль 2013) использование не является:

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

И #process больше не нужны.

Смежные вопросы