我正在尝试修改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
这样的值,但没有运气。
答案 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'];
哪个适用于主题功能和模板。我尝试做了一些类似的东西,并在页面渲染中挖得很深,以寻找渲染区域的函数,这是不可能的,或者不值得尝试在堆栈中更早地渲染区域。