如何在Drupal表单中包含一个区域

时间:2010-09-27 03:50:02

标签: drupal drupal-6 theming

我正在尝试修改drupal评论表格,以便在表格上方我可以显示区域并向该区域添加更多区块(比如一些促销横幅)。

我在template.php中这样做 我有一个工作themename_comment_form函数,可以将$form['intro']['#value']设置为我想要的值。我也知道如何创建一个新的区域。

我正在努力获取该区域的价值(比如$above_comment_form)并在themename_comment_form中提供它(类似$form['intro']['#value'] = $above_comment_form;) 我已经尝试过preprocess_page,preprocess_node来设置像$vars['above_comment_form']=$above_comment_form这样的值,但没有运气。

2 个答案:

答案 0 :(得分:2)

要创建区域,您需要将其添加到模块的.info文件中。如果您没有定义任何区域,则默认值为5:

  • 含量
  • 页脚

如果您想添加/删除区域,则需要在主题中编写所有所需的区域。因此,要包含自定义区域,您需要在.info文件中包含此内容:

regions[header] = "Header"
regions[left] = "Left sidebar"
regions[content] = "Content"
regions[right] = "Right sidebar"
regions[footer] = "Footer"
regions[above_comment_form] = "Above the comment form"

现在,区域默认情况下仅在page.tpl.php中可用。您可以使用theme_blocks获取用户可用的区域中的块。因此,在preprocess_node函数中,您需要添加:

$vars['above_comment_form'] = theme('blocks', 'above_comment_form');

然后在你的node.tpl.php中你可以这样做:

<div id="above_comment_form">
  <?php print $above_comment_form; ?>
</div>

这应该可以完成你的任务。

答案 1 :(得分:1)

区域的渲染在调用堆栈中很晚发生,因此大多数情况下不可能将它们包含在主题函数或form_alter之类的内容中。

但是,您可以在其中渲染单个块,因此如果您要使用以下内容添加特定块:

$block = module_invoke('block', 'block', 'view', 26);
print $block['content'];

哪个适用于主题功能和模板。我尝试做了一些类似的东西,并在页面渲染中挖得很深,以寻找渲染区域的函数,这是不可能的,或者不值得尝试在堆栈中更早地渲染区域。

相关问题