Drupal 7 向Drupal闭包添加HTML?

Drupal 7 向Drupal闭包添加HTML?,drupal-7,drupal-6,closures,footer,Drupal 7,Drupal 6,Closures,Footer,要添加javascript,您可以使用: drupal_add_js 与css类似: drupal_add_css 但是如果我只想在页面的末尾添加html呢。例如,在页面末尾添加一个包含一些文本的div?您可以将以下内容添加到主题的template.php文件中: function phptemplate_preprocess_page(&$vars) { $vars['closure'] .= 'Add markup here'; } 您可以编写一个块来执行此操作,并将该块放入

要添加javascript,您可以使用:

drupal_add_js
与css类似:

drupal_add_css

但是如果我只想在页面的末尾添加html呢。例如,在页面末尾添加一个包含一些文本的div?

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


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

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

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

Drupal有一个钩子,您可以实现并添加任何代码到页面的页脚-钩子页脚。参见

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

  • 使用块
  • 编辑模板
  • 使用预处理函数
最简单的方法是添加您创建的块,在其中可以放置自定义标记。您甚至可以为它创建一个特殊的模板,这样您就不会得到通常的drupal块标记,而只得到在块内容中编写的内容

这应该满足您的需求:

  • 您可以100%控制标记的生成位置(您可以在标记中定义区域)
  • 您可以100%控制生成的标记
现在,如果您不想使用块,因为您不想让站点管理员知道该块,那么第二个最好的方法是:

  • 在主题设置中添加复选框
  • 在预处理页面挂钩中,如果复选框已选中或未选中,则设置布尔变量
  • 在页面模板中,检查变量,如果是真的,则在需要的地方编写标记
  • 这将基本上做与上面相同的事情,只是在主题中有设置,而不是添加块。这将需要更多的工作


    您可以在自定义模块中执行几乎相同的操作,但在模块中执行此操作没有多大意义,因为这纯粹是演示,而且您始终依赖于您的主题。

    如果您希望更改基于主题,这里有很多建议都是可行的,但是如果您希望此操作来自模块,使用块区域,页面模板或页面预处理不会剪切它,因为您将更改与主题绑定。

    从模块化的角度来看,以下选项是最好的:

    hook\u footer()::my\u module\u footer()应该返回一个HTML字符串,甚至可以是javascript。例如

    function my_module_footer(){
    
        return "<script type='text/javascript'>//your script</script>"
    
    }
    
    function my_module_footer(){
    返回“//您的脚本”
    }
    
    您可以使用drupal$_GET['q']来获取页面URL,并使该返回对页面URL是有条件的

    否则,我有时使用$GLOBALS[“\u add\u my\u footer”]作为布尔值,并在模块中的各个点设置它,然后在hook\u footer()中,查看它是否为真


    drupal_add_js--api.drupal.org/api/drupal/includes--common.inc/function/drupal_add_js/6::您可以通过将$scope参数设置为“footer”,将javascript添加到页脚中,例如

    函数my_module_init(){
    $script=“您的脚本”;//注意没有标记
    drupal_add_js($script,'inline,'footer');
    //您还可以使用此函数获取.js文件
    }
    

    请注意,我将drupal_add_js放入hook_init()——我这样做是因为如果不这样做,当使用drupal的主动缓存特性时,脚本可能会丢失


    不幸的是,drupal_add_css没有$scope参数,这里有一个小技巧可以在drupal 6和7中使用

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

    $script='/-->这是粗体html代码因为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>',
        );
      }
    }
    
    /**
    *实现hook\u page\u alter()。
    */
    功能示例_page _alter(&$page){
    if(变量_get('dev_query',0)){
    $page['page_bottom']['devel']=数组(
    “#键入”=>“标记”,
    “#markup'=>”.devel_query_table()”,
    );
    }
    }
    

    (From)

    我不建议使用block,因为仅仅在页脚上添加一些元素就太过分了。 这是一个钩子,您可以使用它为Drupal7添加
    标记之前的内容

    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>',
      );
    } 
    
    函数挂钩页面构建(&$page){
    $page['page\u bottom']['YOUR\u MODULE']=array(
    “#markup”=>“我想在页面的bootom处插入”,
    );
    } 
    
    我想这样做,当我启用一个模块时,它会出现在页面中,如果我禁用该模块,它不会出现。所以这些方法都不起作用。添加一个条件来检查模块是否存在:同意Jeremy。我甚至使用了一个块来添加一个脚本SRC标记,它工作得很好。
    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>',
      );
    }