本文の終了タグの直前にHTMLを挿入するにはどうすればよいですか?


8

drupal_add_js()JavaScriptをページの下部に追加する方法と同様に、任意のHTMLコンテンツを本文の終了タグの前に挿入する最良の方法を探しています。

私はWordpressの出身ですが、Wordpressではwp_footer()フックを使用してこれを実現できます。

私はの使用を調査しましたhook_page_alter()が、これがこれを行う正しい方法であるのか、またはこのタスクを達成するためのより良い方法があるのか​​と思っていました。


1
このような同様の質問がときどき出てきます。なぜ「ボディタグの直前にHTMLを挿入する」必要があるの、いつも疑問に思っています。あなたはあなたがしていることを間違った方法で近づいているように私には思えますか?
Letharion 2012年

1
なぜ他の人がそれを望んでいるのかについて話すことはできませんが、私の場合、必要なブロックのページにアンダースコアJSテンプレートを追加しています。ただし、複数のブロックで1つのテンプレートを使用する可能性があるため、すべてのテンプレートをページの下部に追加して、ロードされたかどうかを簡単に確認できるようにしました。私にとっては、それは基本的には美学/便利さです。
drebabels 2012年

遅いと申し訳ありませんが、それは私には意味がありませんか?#attachedのcache / aggregation / etcの利点はフォーム以外にも使用できますが、その理由はまだわかりません。
Letharion

#attachedの汎用性を知りませんでしたので、紹介していただきありがとうございます。ただし、私の場合、これらのテンプレートファイルのコンテンツを(ファイルにリンクするだけでなく)ページに書き込んでいるので、間違っている場合は修正してください。実際のページキャッシングで処理されるためです。
drebabels 2012年

回答:


23

Drupal 6で使用されていたhook_footer()と同等のことは、次のようなコードを使用して、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>',
  );
}

の内容は、次のコードを使用してhtml.tpl.php$page['page_bottom']から出力されます。

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

の値は、次のコードを使用してtemplate_process_html()$page_bottomから初期化されます。

  // 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()ページに新しいコンテンツを追加するために使用されるべきです。


この答えで上に行ってくれてありがとう。これは非常に役立ちます。
drebabels
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.