我正在使用Drupal构建一个站点,但我有一个小问题。我正在使用hook_menu渲染表单。表单呈现良好,一切都很好。然后,我使用 hook_page_alter(( 向页面添加更多标记。Hook_page_alter看起来像这样:
function renderer_page_alter(&$page) {
if(drupal_is_front_page()) {
$q = db_query('SELECT name, mname, number_of_instances FROM {event_type} ORDER BY number_of_instances DESC');
foreach($q as $event) {
$options['name'][] = $event->name;
$options['mname'][] = $event->mname;
}
$tri = array(
'#theme' => 'frontpage_canvas',
'#options' => $options
);
return $page['content']['triangles'] = $tri;
}
}
因此,在我的本地 MAMP 安装中,内容首先显示来自 hook_page_alter(( 的结果,然后是表单。但是,在远程安装中,顺序是相反的(表单的提交按钮位于页面顶部,其余内容位于页面下方(。安装之间的唯一区别(我能想到的(是远程安装是Drupal 7.8,本地安装是Drupal 7.9。
我想以与本地安装相同的方式进行远程安装。以前有没有人遇到过这样的问题?
呈现的 HTML 的基本结构如下所示:
<div class=content>
//all the form information is in here
</div>
<div class=rendered>
//all the output from hook_page_alter() is here
</div>
编辑:问题是由于某种原因,block.tpl.php正在添加两个div:
<div id="block-system-main" class="block block-system first last odd">
<div class="content">
//My form markup is in here
</div>
</div>
//The hook_page_alter markup is in here.
那么,有没有办法强制Drupal将hook_page_alter标记添加到与表单呈现相同的div中?由于 #weight
属性的呈现方式不会影响定位。
谢谢
数组中的显示顺序是使用 #weight
属性设置的,具有较高#weight
的元素将在具有较低值的元素之后渲染。
如果要强制在内容区域顶部呈现hook_page_alter()
中添加的内容,请按如下方式声明:
$tri = array(
'#theme' => 'frontpage_canvas',
'#options' => $options,
'#weight' => -1000
);
或在内容区域的底部:
$tri = array(
'#theme' => 'frontpage_canvas',
'#options' => $options,
'#weight' => 1000
);
您还可以调整传递给函数的 $page
数组中已存在的其他元素的#weight
,以便完全控制显示顺序。