2011-07-20 37 views
2

我正在尝试渲染包含表单和链接列表的模块。我可以正确显示一个或另一个,但显然不能很好地理解渲染数组格式,以便在同一个块中同时渲染它们(一个在另一个之上)。在用Drupal 7.4将表单与其他内容一起渲染到Drupal 7块

示例设置模块的内容,以显示一个列表:

$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']数组,以便它可以在一个块中呈现?提前致谢。

+0

有一个错误,一个$你的第二个前'return $ block'。我不能编辑它,显然编辑必须至少改变6个字符...... – charliefortune

回答

8

我认为这应该工作,我没有测试,虽然:

$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')); 
+0

谢谢,第一个解决方案工作正常,并且在阅读了关于渲染数组的更多信息之后才有意义。通过我什么是你可以返回一个渲染数组或标记(或只是一个字符串),它的一切工作,但是当你尝试将它们组合成一个渲染数组,你需要使用'#markup'类型已经呈现的东西(如主题输出)。你的代码示例中有一个小的拼写错误,它是“'form'= drupal_get_form”应该是''form'=> drupal_get_form“。干杯 – peetucket

+0

值得注意的是,在渲染数组示例中,您指定“items”和“form”的顺序决定了它们在呈现的HTML中从上到下的顺序。 –