【问题标题】:Rendering a form together with other content into a Drupal 7 block将表单与其他内容一起渲染到 Drupal 7 块中
【发布时间】:2011-07-20 23:29:47
【问题描述】:

我正在尝试在我的模块中呈现一个包含表单和链接列表的块。我可以正确显示一个或另一个,但显然对渲染数组格式的理解不够好,无法在同一块中同时渲染它们(一个在另一个之上)。使用 Drupal 7.4

设置块内容以显示列表的示例:

$block['subject']='Title';
$items= // code that generates a list of links into an array
$theme_args=array('items'=>$items,'type'=>'ul');
$block['content']=theme('item_list',$theme_args);
return $block;

设置块内容以显示表单的示例:

$block['subject']='Title';
$block['content']=drupal_get_form('mymodule_myform_function'); 
// call function that returns the usual form array  
return $block;

每个案例对我来说都很好。如何将表单和列表组合成一个块 ['content'] 数组,以便它可以在一个块中呈现?提前致谢。

【问题讨论】:

  • 有一个错误,在你的第二个'return $block'之前有一个$。我无法编辑它,显然编辑必须更改至少 6 个字符...

标签: drupal-7 drupal-modules drupal-render


【解决方案1】:

我认为这应该可行,但我还没有测试过:

$block = array(
  'items' = array(
    '#markup' => theme('item_list', $theme_args);
  ),
  'form' = drupal_get_form('mymodule_myform_function');
);
$block['content'] = $block;

这有点违反直觉,drupal_get_form 返回一个表单渲染数组,而 theme() 返回标记。

你总是可以这样做(糟糕的解决方案),但不建议这样做,因为它的效率非常低,并且违背了 Drupal 打算让你做的一切:

$block['content'] = theme('item_list', $theme_args) . render(drupal_get_form('myform'));

【讨论】:

  • 谢谢,第一个解决方案运行良好,并且在我阅读了有关渲染数组的更多信息后才有意义。通过我的是,您可以返回一个渲染数组或标记(或只是一个字符串)并且一切正常,但是当您尝试将它们组合成一个渲染数组时,您需要使用 '#markup' 类型已经渲染的东西(比如主题输出)。您的代码示例中有一个小错字,即“'form' = drupal_get_form”应该是“'form'=>drupal_get_form”。干杯
  • 值得注意的是,在您的渲染数组示例中,您指定 itemsform 的顺序决定了它们出现的顺序,在渲染的 HTML 中从上到下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多