我使用Ctools Dependency使字段集可隐藏。这是我的代码的一部分:
$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,
);
在上面的代码段中,有两个元素,一个是select,一个是fieldset。两者都有#process和#dependency参数,并且都指向依赖值的一个字段。问题是像select或textfield这样的元素可以很容易地隐藏,但它不适用于fieldset。在this支持请求页面中,CTools创建者提到'#input' => true
是一种解决方法。如您所见,我将其添加到代码中,但它也不起作用。
你有什么建议吗?
答案 0 :(得分: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>',
);
首先必须为他的字段集设置ID。然后它必须包装在DIV标签中。 DIV的ID应该是feildset的ID,后缀为'-wrapper'。
答案 1 :(得分:1)
现在(2013年2月)用法是:
$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。