在Drupal闭包中添加HTML?

时间:2009-09-04 08:07:19

标签: drupal-7 drupal-6 closures footer

要添加javascript,您可以使用:

drupal_add_js

类似于css:

drupal_add_css

但是,如果我只想在页面末尾添加html,该怎么办?即在页面末尾添加一个带有一些文本的div?

9 个答案:

答案 0 :(得分:9)

如果您希望更改是基于主题的,那么这里有很多建议,但是如果您希望这些更改来自模块,使用块区域,页面模板或页面预处理不会削减它,因为你正在改变主题。

从模块化角度来看,以下选项最佳:

hook_footer() - http://api.drupal.org/api/function/hook_footer/6 :: my_module_footer()应该返回一个HTML字符串,甚至可以是javascript。例如。

function my_module_footer(){

    return "<script type='text/javascript'>//your script</script>"

}

您可以使用drupal $ _GET ['q']获取页面URL,并使该页面URL具有条件。

否则,我有时会使用$ GLOBALS [“_ add_my_footer”]作为布尔值,并将其设置在模块中的各个点,然后在hook_footer()中,看看它是否为真。


drupal_add_js - api.drupal.org/api/drupal/includes--common.inc/function/drupal_add_js/6 ::您可以使用此功能将javascript添加到页脚$ scope参数“footer” - 例如

function my_module_init(){

    $script = "your script "; // notice no <script> tags
    drupal_add_js($script, 'inline', 'footer');
    // you can also use this function to grab a .js file

}

请注意,我将drupal_add_js放入hook_init() - 我这样做是因为如果不这样做,那么在使用Drupal的激进缓存功能时脚本可能会丢失。

不幸的是,drupal_add_css没有$ scope参数

答案 1 :(得分:5)

由于hook_footer没有在Drupal 6中存活,这里是等效函数以及如何在Drupal 7中实现它:

/**
* Implements hook_page_alter().
*/
function example_page_alter(&$page) {
  if (variable_get('dev_query', 0)) {
    $page['page_bottom']['devel']= array(
      '#type' => 'markup',
      '#markup' => '<div style="clear:both;">' . devel_query_table() . '</div>',
    );
  }
}

(来自http://preprocess.me/drupal-hookfooter-in-drupal-7

答案 2 :(得分:3)

您可以将以下内容添加到主题的template.php文件中:

  
function phptemplate_preprocess_page(&$vars) {
  $vars['closure'] .= 'Add markup here';
}
  

答案 3 :(得分:2)

您可以编写一个块来执行此操作并将块放入闭包中。

答案 4 :(得分:2)

Drupal有一个你可以实现的钩子,并且可以在页面的页脚中添加你想要的任何代码 - hook_footer。见http://api.drupal.org/api/function/hook_footer/6

答案 5 :(得分:1)

...或者,可能不像其他答案那样推荐,但更直接,你可以直接将html添加到page.tpl.php文件中。

答案 6 :(得分:1)

已经提出了一些好的建议:

  • 使用块
  • 编辑模板
  • 使用预处理功能。

最简单的方法是添加您创建的块,您可以在其中放置自定义标记。你甚至可以为它创建一个特殊的模板,所以你不会得到你通常的drupal块标记,而只是你在块内容中写的内容。

这应该涵盖您的需求:

  • 您可以100%控制标记的生成位置(您可以在其中定义区域)
  • 您可以100%控制生成的标记

现在,如果您不想使用块,因为您不希望网站管理员知道该块,那么第二个最好的事情就是:

  1. 在主题设置中添加一个复选框。
  2. 在预处理页面挂钩中,如果选中复选框,则设置布尔变量。
  3. 在您的页面模板中,检查变量,如果是,则将标记写在您想要的位置。
  4. 这基本上与上面的内容相同,只是你在主题中有设置,而不是添加一个块。这将需要更多的工作。

    你可以在一个自定义模块中做同样的事情,但是在一个模块中这样做是没有多大意义的,因为它纯粹是演示文稿而且你依赖于你的主题。

答案 7 :(得分:1)

这是一个适用于drupal 6和7的小技巧

    $script = '//--><!]]></script><strong>this is bold html code</strong><script type="text/javascript"><!--//--><![CDATA[//><!--';
    drupal_add_js($script, 'inline', 'footer');

因为很明显你不想修改模板文件或者使用上面建议的任何其他方法,所以这应该可以将html添加到页面,就像它对js和css一样

答案 8 :(得分:0)

我不推荐使用块,因为它只是在页脚上添加了一些元素。 以下是可用于在Drupal 7的</body>标记之前添加内容的钩子。

function hook_page_build(&$page) {
  $page['page_bottom']['YOUR_MODULE'] = array(
    '#markup' => '<div> I want to get inserted at the bootom of the page </div>',
  );
}