如何将“收音机”添加到围绕主题表构建的表单中?
使用单个“复选框”或单个“收音机”似乎工作正常,但一旦我使用“收音机”,就根本没有单选按钮呈现。
从另一个堆栈溢出问题中,我已经看到form_process_radios()
提到,并且使用它实际上显示了单选按钮。但它们不再捆绑在一起,它们都可以立即进入“开启”状态。
有任何想法吗?
如何将“收音机”添加到围绕主题表构建的表单中?
使用单个“复选框”或单个“收音机”似乎工作正常,但一旦我使用“收音机”,就根本没有单选按钮呈现。
从另一个堆栈溢出问题中,我已经看到form_process_radios()
提到,并且使用它实际上显示了单选按钮。但它们不再捆绑在一起,它们都可以立即进入“开启”状态。
有任何想法吗?
简单的答案:你不能轻易。(尽管您可能成功地定义了自己的处理器,使用 expand_radios,硬核的东西!)。
更长的答案:radios
使用theme_radios。正如您所看到的,它使用单个 DIV 包装器,这使得无法在桌子上展开无线电。
您最好做的是创建一个分层表单,radio
每个选项一个。避免radios
。通过对它们进行分层分组,它们name
将是相同的,这就是无线电分组的方式。
# from install.php:
foreach ($names as $profile => $name) {
$form['profile'][$name] = array(
'#type' => 'radio',
'#value' => 'default',
'#return_value' => $profile,
'#title' => $name,
'#description' => isset($profiles[$profile]['description']) ? $profiles[$profile]['description'] : '',
'#parents' => array('profile'),
);
}
然后,在围绕表单构建表格的主题功能中,在适当的表格单元格中呈现每个收音机。
因此,要使用 Berkes 建议,您必须使用“#atributes”属性,对于同一组的所有无线电元素具有相同的名称。
像这样:
'#attributes' => array('name' => array('somename'))
这是一个更完整的例子:
for ($i = 0; $i < $num; $i++){
$element[$i]['answer'] = array(
'#type' => 'textfield',
'#title' => t('Answer'),
);
$element[$i]['correct'] = array(
'#type' => 'radio',
'#value' => 'default',
'#return_value' => $i,
'#title' => t('Correct answer'),
'#attributes' => array('name' => array('correct-answer')),
);
}
这是一个 Drupal 7 示例,说明了我如何在表格中添加单选按钮,以便它们易于使用:
$form['item']['table_start'] = array(
'#markup' => '<table><thead><tr><th>Header 1</th><th>Header 2</th></tr></thead><tbody>'
);
for ($i = 1; $i < 3; $i++) {
$form['item']['tr_start_'.$i] = array('#markup' => '<tr>');
$form['item'][$i]['item'] = array(
'#type' => 'radio',
'#title' => t('Title'),
'#return_value' => $i,
'#prefix' => '<td>',
'#suffix' => '</td>',
);
$form['item']['item_'.$i] = array('#markup' => '<td>'. $i .'</td>');
$form['item']['tr_end_'.$i] = array('#markup' => '</tr>');
}
$form['item']['table_end'] = array('#markup' => '</tbody></table>');
这允许我在模板文件中呈现表单的整个表格部分,<?php print drupal_render($form['item']); ?>
并在验证中获取选定的单选按钮值,并使用$form_state['values']['item']
. 单选按钮已经具有相同的名称属性,因此无需手动指定即可链接在一起。
你需要使用这个 theme_tableselect
功能
例如,我认为您应该阅读此表单回调:node_admin_nodes from node.admin.inc