Как вставить HTML-код непосредственно перед закрывающим тегом тела?


Я ищу лучший способ вставить произвольный HTML-контент на страницу перед закрывающим тегом body, аналогично тому, как drupal_add_js() добавляет JavaScript в нижнюю часть страницы.

Я исхожу из фона Wordpress, и в Wordpress это может быть достигнуто с помощью крючка wp_footer().

Я изучал возможность использования hook_page_alter(), но мне было интересно, правильный ли это способ сделать это или есть лучший способ выполнить эту задачу.

 8
Author: kiamlaluno, 2012-01-08

1 answers

Эквивалент hook_footer(), который использовался в Drupal 6, заключается в реализации 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_bottom инициализируется из template_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() следует использовать для добавления нового содержимого на страницу.

 23
Author: kiamlaluno, 2012-11-08 19:16:23