Php Drupal 7 hook_node_视图将表单添加到节点的内容中

Php Drupal 7 hook_node_视图将表单添加到节点的内容中,php,drupal,drupal-7,Php,Drupal,Drupal 7,为什么表单不显示?我做错什么了吗?正在填充表单对象。我可以做#markup=>'Something',它可以工作。drupal_get_form的返回实际上是一个渲染数组本身,因此您可以执行以下操作: function example_module_node_view($node, $view_mode, $langcode) { $f = drupal_get_form('example_module_form', $node); $node->content['

为什么表单不显示?我做错什么了吗?正在填充表单对象。我可以做#markup=>'Something',它可以工作。

drupal_get_form的返回实际上是一个渲染数组本身,因此您可以执行以下操作:

function example_module_node_view($node, $view_mode, $langcode)
{   
    $f =  drupal_get_form('example_module_form', $node);
    $node->content['data_collection_form'] = array('#value' => $f, '#weight' => 1); 
}
如果您确实希望以另一种方式执行此操作,那么表单应该是可呈现的“元素”,因此键的前缀不应为
#


渲染数组中带有前缀为
#
的键的所有条目都被视为属性,而那些没有被视为“子项”的条目则被视为递归渲染。

Clive answer在我的情况下不起作用。我需要调用drupal_render并将其作为标记传递

$f = drupal_get_form('example_module_form', $node);
$node->content['data_collection_form'] = array(0 => $f, '#weight' => 1);

这很有效,但我不确定这是不是正确的方法。

你的方法和克莱夫的方法对我都有效。同样奇怪的是,在查看官方drupal_get_form API时,官方列出的唯一参数只有1($form_id),但在各种示例中,我看到人们在drupal_get_form中使用了2个参数。我能够遵循官方的drupal_get_form API,只使用一个参数,一切正常。所以在这个例子中,我能够做到:$form=drupal\u get\u form('example\u module\u form')。drupal\u呈现形式对我来说很有效。我的问题是,打印的是单词“Array”,而不是表单的内容。
$f = drupal_get_form('example_module_form', $node);
$node->content['data_collection_form'] = array(0 => $f, '#weight' => 1);
$form = drupal_get_form('example_module_form', $node);
$node->content['data_collection_form'] = array(
  '#markup' => drupal_render($form),
  '#weight' => 10,
);