Forms 带收音机的Drupal桌

Forms 带收音机的Drupal桌,forms,drupal,radio-button,tabular,Forms,Drupal,Radio Button,Tabular,如何将“收音机”添加到围绕主题表构建的表单中 使用单个“复选框”或单个“收音机”似乎可以很好地工作,但只要我使用“收音机”,就根本没有单选按钮渲染 从另一个堆栈溢出问题中,我看到了前面提到的form\u process\u radios(),使用它实际上显示了单选按钮。但它们不再捆绑在一起,所有这些都可以同时进入“开启”状态 有什么想法吗?例如,我想你应该阅读一下这个表单callback:from node.admin.inc简单的回答:你不容易。(尽管您可能已经成功地定义了自己的处理器,使用了

如何将“收音机”添加到围绕主题表构建的表单中

使用单个“复选框”或单个“收音机”似乎可以很好地工作,但只要我使用“收音机”,就根本没有单选按钮渲染

从另一个堆栈溢出问题中,我看到了前面提到的
form\u process\u radios()
,使用它实际上显示了单选按钮。但它们不再捆绑在一起,所有这些都可以同时进入“开启”状态


有什么想法吗?

例如,我想你应该阅读一下这个表单callback:from node.admin.inc

简单的回答:你不容易。(尽管您可能已经成功地定义了自己的处理器,使用了expand_无线电和硬核技术!)

更长的回答:
无线电使用。正如您所看到的,它使用单个DIV包装器,这使得不可能在一张桌子上分散无线电

您最好创建一个分层表单,每个选项有一个
radio
。避免使用
收音机
。通过按层次对它们进行分组,
名称
将是相同的,这就是方法


然后,在围绕表单构建表格的主题函数中,将每个收音机呈现在相应的表格单元格中。

因此,要使用Berkes advice,您必须使用“#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')),
  );
}
($i=0;$i<$num;$i++)的
{
$element[$i]['answer']=数组(
“#键入”=>“文本字段”,
“#title”=>t(‘答案’),
);
$element[$i]['correct']=数组(
“#键入”=>“收音机”,
“#值”=>“默认值”,
“#返回_值”=>$i,
“#title”=>t(正确答案),
“#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>');
$form['item']['table_start']=array(
“#标记”=>“标题1标题2”
);
对于($i=1;$i<3;$i++){
$form['item']['tr_start.'$i]=array(“#markup'=>”);
$form['item'][$i]['item']=array(
“#键入”=>“收音机”,
“#title”=>t('title'),
“#返回_值”=>$i,
“#前缀”=>”,
“#后缀”=>”,
);
$form['item']['item.'$i]=数组('.#markup'=>'.$i');
$form['item']['tr_end.'$i]=array(“#markup'=>”);
}
$form['item']['table_end']=array(“#markup'=>”);

这允许我使用
在模板文件中呈现表单的整个表部分,并在验证中获取所选单选按钮值,并使用
$form\u state['values']['item']
提交处理程序。单选按钮已具有相同的名称属性,因此无需手动指定即可链接在一起。

您需要
主题表选择
功能

据我所知,这与此无关。它既不是一张桌子,也不是关于收音机的。@volocuga theme_table()的存在并不意味着通过其他方式构建桌子自动成为“狗屎”。Drupal7引入了一个“tableselect”FAPI元素,但它并没有涵盖所有用例,我目前不知道如何用theme_table()实现这一点。如果你这样做了,那么将其作为答案写在这里会有很大的帮助,而不是说我的解决方案不完美但可靠且有效。是的,我可以理解这有点混乱,但是这个解决方案是开箱即用的,而且简单快捷。谢谢:)
$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>');