Drupal 在模板中呈现多个表单,包括呈现表单元素

Drupal 在模板中呈现多个表单,包括呈现表单元素,drupal,drupal-7,Drupal,Drupal 7,我正在向模板发送一个表单数组,但如果要呈现单个表单元素,我很难弄清楚如何打印开始和结束表单标记 下面是一个示例,让您了解发送到主题函数的结构: function mymodule_page_callback() { ... $i = 0; foreach ($widgets as $widget) { $forms[] = drupal_get_form('my_renderable_form_' . $i, $widget); $i++; } return

我正在向模板发送一个表单数组,但如果要呈现单个表单元素,我很难弄清楚如何打印开始和结束表单标记

下面是一个示例,让您了解发送到主题函数的结构:

function mymodule_page_callback() {
  ...
  $i = 0;
  foreach ($widgets as $widget) {
    $forms[] = drupal_get_form('my_renderable_form_' . $i, $widget);
    $i++;
  }
  return theme('my_theme_function', array('forms' => $forms));
}
在我的模板中,我正在构建一个每行1个表单的表。这是我唯一能让它工作的方法:

$header = array('field 1', 'field 2', '');
foreach ($variables['forms'] as $form) {
  $row = array(
    drupal_render($form['field1']),
    drupal_render($form['field2']),
    // Manually set the closing form tag
    drupal_render($form['submit']) . drupal_render_children($form) . '</form>'
  );
  // Now drupal_render($form) to get the opening/closing form tags
  // and stuff it at the beginning of the 1st column.
  // This has to be done last so the rest of the form doesn't render with it.
  $row[0] = str_replace('</form>', '', drupal_render($form)) . $row[0];
  $rows[] = $row;
}
print theme('table', array('header' => $header, 'rows' => $rows);
$header=array('field1'、'field2'、'');
foreach($variables['forms']作为$form){
$row=数组(
drupal_渲染($form['field1']),
drupal_渲染($form['field2']),
//手动设置关闭表单标记
drupal_render($form['submit'])。drupal_render_子项($form)。“”
);
//现在drupal_render($form)来获取开始/结束表单标签
//然后在第一列的开头填充。
//这必须在最后完成,以便表单的其余部分不会使用它进行渲染。
$row[0]=str_replace(“”,,,drupal_render($form))。$row[0];
$rows[]=$row;
}
打印主题('table',array('header'=>$header,'rows'=>$rows);

是否有适当的方法在此处呈现每个表单的打开和关闭?

在单个表单元素上使用
drupal\u render
,而不是在整个表单上使用:

$header = array('field 1', 'field 2', '');
foreach ($variables['forms'] as $form) {
  $rows[] = array(array('data' => render($form), 'colspan' => 3));
}
print theme('table', array('header' => $header, 'rows' => $rows);
您可能应该考虑使用FormAPI元素


编辑:更新了文档中指定的$rows[]分配。

您建议我将呈现的表单分配给一个表行,该表行必须是一个数组……如果这样做有效,则问题涉及呈现单个表单元素(标题的一部分)。我不认为tableselect会解决每行1个表单的目标,而且每个表1个表单无论如何都很容易实现。我可能应该把表从示例中去掉,因为它更多地是关于在单个模板中设置表单数组的主题,包括呈现这些表单的各个元素。如果存在一些错误,我会很高兴出错我不理解的事情。你是对的。表行必须是一个数组。我更新了我的答案以反映这一点。Tableselect不会满足你每行1个表单的目标。但是,我建议你重新考虑你的设计,使用Tableselect,而不是每行都有一个提交按钮。我不知道你的确切用例,但我非常怀疑ct表示,这在您的场景中是可行的,甚至更可取。您仍然提供了糟糕的代码,并且没有真正的解决方法,尽管我不想寻找解决方法。我很惊讶,当需要控制呈现单个表单元素时,无法处理在模板中呈现多个表单。我的问题纯粹是确认是否存在这是实现这一目标的一种方式。