Як вставити HTML перед тегом закриття тіла?


8

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

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

Я розглядав питання використання hook_page_alter(), але мені було цікаво, чи це правильний спосіб зробити це, чи є кращий спосіб виконання цього завдання.


1
Подібні питання, як це, виникають раз у раз, і мені завжди цікаво, чому потрібно "вставляти HTML перед тегом body". Мені здається, ви наближаєтесь до того, що ви робите неправильно?
Летаріон

1
Я не можу говорити, чому інші хочуть це робити, але в моєму випадку я додаю на сторінку шаблони підкреслення JS для блоків, які вимагають їх. Однак кілька блоків можуть використовувати один шаблон, тому я хотів додати всі шаблони в нижню частину сторінки, щоб я міг легко бачити, завантажені вони чи ні. Для мене це в основному естетична / зручна річ.
drebabels

Вибачте, якщо я повільний, але це не має для мене сенсу? З перевагами кешу / агрегації / тощо в #attached , які можна використовувати в більш ніж формах, я все ще не розумію, чому.
Летаріон

Я не усвідомлював універсальність #attached, тому дякую, що ви мені це представили. Однак у моєму випадку я записую вміст цих файлів шаблонів на сторінку (не просто посилання на файли), тому виправте мене, якщо я помиляюся, але я не думаю, що кеш / агрегація переваг #attached матерії в цьому випадку тому що фактичне кешування сторінок піклується про це.
drebabels

Відповіді:


23

Еквівалент kuk_footer (), який використовувався в Drupal 6, полягає в реалізації куки_страни_будування () та зміні вмісту $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');

Різниця між ho_page_alter () і hook_page_build()тим, що hook_page_alter()виконується після, hook_page_build()і повинна використовуватися для зміни або видалення вмісту, доданого іншим модулем, при цьому hook_page_build()слід використовувати для додавання нового вмісту на сторінку.


Дякую за те, що перейшов вище та далі з цією відповіддю. Це дуже корисно.
drebabels
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.