web-dev-qa-db-fra.com

Comment insérer du HTML juste avant la balise de fermeture du corps?

Je recherche le meilleur moyen d'insérer du contenu HTML arbitraire dans une page avant la balise de fermeture, similaire à la façon dont drupal_add_js() ajoute JavaScript au bas d'une page.

Je viens d'un arrière-plan Wordpress, et dans Wordpress cela pourrait être accompli en utilisant le crochet wp_footer()).

J'ai cherché à utiliser hook_page_alter(), mais je me demandais si c'était la bonne façon de procéder ou s'il y avait une meilleure façon d'accomplir cette tâche.

8
drebabels

L'équivalent de hook_footer () utilisé dans Drupal 6 est d'implémenter hook_page_build () et de modifier le contenu de $page['page_bottom'], En utilisant un code similaire au suivant:

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

Le contenu de $page['page_bottom'] Est sorti de html.tpl.php , en utilisant le code suivant:

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

La valeur de $page_bottom Est initialisée à partir de template_process_html () à l'aide du code suivant:

  // 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');

La différence entre hook_page_alter () et hook_page_build() est que hook_page_alter() est exécutée après hook_page_build() et doit être utilisée pour modifier ou supprimer du contenu ajouté par un autre module, tandis que hook_page_build() doit être utilisé pour ajouter du nouveau contenu à la page.

23
kiamlaluno