0

我正在尝试修改 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但没有运气。

4

2 回答 2

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>

那应该完成你的任务。

于 2010-09-27T08:27:17.943 回答
1

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

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

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

这将适用于主题功能和模板。我尝试做一些类似的事情并在页面渲染中深入挖掘以查找渲染区域的函数,并且尝试在堆栈中较早地渲染区域是不可能的,或者不值得。

于 2010-09-29T21:01:46.387 回答