如何在正文结束标记之前插入HTML?


8

我正在寻找在结束body标签之前将任意HTML内容插入页面的最佳方法,类似于drupal_add_js()将JavaScript添加到页面底部的方法。

我来自Wordpress的背景,在Wordpress中可以通过使用wp_footer()挂钩来完成。

我已经研究了使用hook_page_alter(),但是我想知道这是否是执行此操作的正确方法,或者是否有更好的方法来完成此任务。


1
像这样的类似问题时常会弹出,我总是想知道为什么,有必要“在body标签之前插入HTML”。在我看来,您正在以错误的方式处理自己正在做的事情?
Letharion 2012年

1
我无法说出为什么其他人想要这样做,但是就我而言,我正在向页面添加Underscore JS模板,以查找需要它们的块。但是,多个块可能利用一个模板,因此我想将所有模板添加到页面底部,以便我可以轻松查看它们是否已加载。对我来说,这基本上是一种美学/便利性。
drebabels,2012年

抱歉,如果我很慢,但这对我来说没有意义?凭借#attached的缓存/聚合/等优势,可以将其用于多种形式,但我仍然不明白为什么。
Letharion 2012年

我不知道#attached的多功能性,因此感谢您向我介绍它。但是,就我而言,我正在将那些模板文件的内容写入页面(而不仅仅是链接到文件),因此,如果我写错了,请更正我,但在这种情况下,我认为#attached的内容不会带来缓存/聚合的好处因为实际的页面缓存会解决这个问题。
drebabels,2012年

Answers:


23

在Drupal 6中使用的hook_footer()等效于实现hook_page_build(),并$page['page_bottom']使用类似于以下代码的代码来更改的内容:

function mymodule_page_build(&$page) {
  $page['page_bottom']['devel'] = array(
    '#weight' => 25, 
    '#markup' => '<div style="clear:both;">' . devel_query_table() . '</div>',
  );
}

使用以下代码$page['page_bottom']html.tpl.php中输出的内容:

  <?php print $page_top; ?>
  <?php print $page; ?>
  <?php print $page_bottom; ?>
</body>
</html>

使用以下代码$page_bottomtemplate_process_html()初始化的值:

  // Render page_top and page_bottom into top level variables.
  $variables['page_top'] = drupal_render($variables['page']['page_top']);
  $variables['page_bottom'] = drupal_render($variables['page']['page_bottom']);
  // Place the rendered HTML for the page body into a top level variable.
  $variables['page'] = $variables['page']['#children'];
  $variables['page_bottom'] .= drupal_get_js('footer');

hook_page_alter()和之间的区别在于hook_page_build()hook_page_alter()hook_page_build()应在之后执行,并且应用于更改或删除由另一个模块添加的内容,而hook_page_build()应用于向页面添加新内容。


感谢您超越这个答案。这非常有帮助。
drebabels,2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.