我在drupal7中有表格。
我需要的是:我有类别和子类别。我必须在
之类的复选框中列出这些内容
我将代码用作
$form['rate_the_room']['talent'] = array(
'#prefix'=>'<h1>category:</h1>',
'#type' => 'checkboxes',
'#options' => $sub_tal,
);
这里$ sub_tal是一个数组。如果它是单维数组,它可以正常工作。这里如何传递数组(类别,子类别来自db)。如何使用此代码维护此结构。
请帮助我谢谢。
答案 0 :(得分:1)
为什么这些都需要在一个表单元素中有什么特别的原因吗?如果您的数据设置正确,您只需循环遍历它们并以有条理的方式创建元素。
function my_test_form($form_state) {
// Assuming you have your data in a format like this
$categories = array(
'cat1' => array(
'#title' => 'category 1',
'sub1' => 'Subcat1',
'sub2' => 'Subcat2',
),
'cat2' => array(
'#title' => 'category 2',
'sub21' => 'Subcat21',
'sub22' => 'Subcat22',
),
'cat3' => 'category 3',
);
$elements = array();
foreach ($categories as $cat => $data) {
// If multidimensional, create parent and loop through children
if (is_array($data)) {
$elements[] = array(
'#type' => 'checkbox',
'#title' => $data['#title'],
'#return_value' => $cat,
);
foreach (element_children($data) as $subcat) {
$elements[] = array(
'#type' => 'checkbox',
'#title' => $data[$subcat],
'#attributes' => array(
'style' => 'margin-left: 2em',
),
'#return_value' => $cat . '-' . $subcat,
);
}
}
// Else, just create top level
else {
$elements[] = array(
'#type' => 'checkbox',
'#title' => $data,
'#return_value' => $cat,
);
}
}
// Group all of these elements together. They'll be submitted into the same array.
$form['categories'] = $elements;
$form['categories']['#tree'] = TRUE;
$form['categories']['#prefix'] = '<div style="font-weight:bold" class="label">' . t('Checkboxes title') . ':</div>';
$form['submit'] = array(
'#value' => t('Submit me'),
'#type' => 'submit',
);
return $form;
}
function my_test_form_submit($form, &$form_state) {
$submitted_values = array_filter($form_state['values']['categories']);
}
呈现为:
提交表单时,假设选中了一些复选框,$submitted_values
看起来像这样:
array('cat2', 'cat2-sub21', 'cat2-sub22')
您可以更改我在上面每个复选框上设置的#return_value
属性,更改提交给提交处理程序的复选框的值。
提交的值组合在一起,不仅因为它们都在$form['categories']
部分内,而且因为#tree
设置为TRUE
。