与无线电的Drupal表

时间:2011-03-24 03:12:51

标签: forms drupal radio-button tabular

如何将'radios'添加到围绕theme_table构建的表单中?

使用单个“复选框”或单个“收音机”似乎工作正常,但是一旦我使用“无线电”,就没有任何单选按钮呈现。

从另一个Stack Overflow问题,我看到form_process_radios()提到了,使用它实际上显示了单选按钮。但它们不再捆绑在一起,所有这些都可以立即进入“开启”状态。

有什么想法吗?

5 个答案:

答案 0 :(得分:7)

简单回答:你不能轻易。 (尽管你可能已经成功定义了自己的处理器,使用expand_radios,硬核东西!)。

更长的答案:radios使用theme_radios。正如您所看到的,它使用单个DIV包装器,这使得无法在桌面上展开无线电。

您最能做的是创建一个分层表单,每个选项只有一个radio。避免使用radios。通过分层次地对它们进行分组,name将是相同的,这就是radios are grouped的方式。

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

然后,在围绕表单构建表的主题函数中,您将在适当的表格单元格中呈现每个单元格。

答案 1 :(得分:6)

因此,要使用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')),
  );
}

答案 2 :(得分:4)

这是一个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']提交处理程序。单选按钮已经具有相同的名称属性,因此无需手动指定就可以链接在一起。

答案 3 :(得分:0)

我想你应该从node.admin.inc中读取这个表单回调:node_admin_nodes

答案 4 :(得分:0)

您需要to use this theme_tableselect功能