Bagaimana cara saya menyisipkan HTML tepat sebelum tag penutup badan?

8

Saya mencari cara terbaik untuk menyisipkan konten HTML sewenang-wenang ke halaman sebelum tag tubuh penutup, mirip dengan cara drupal_add_js()menambahkan JavaScript ke bagian bawah halaman.

Saya berasal dari latar belakang Wordpress, dan di Wordpress ini bisa diselesaikan dengan menggunakan wp_footer()hook.

Saya telah melihat ke dalam menggunakan hook_page_alter(), tetapi saya bertanya-tanya apakah ini adalah cara yang benar untuk melakukan ini atau apakah ada cara yang lebih baik untuk menyelesaikan tugas ini.

drebabels
sumber
1
Pertanyaan serupa seperti ini muncul setiap sekarang dan kemudian, dan saya selalu bertanya - tanya mengapa , perlukah "menyisipkan HTML tepat sebelum tag tubuh". Sepertinya saya seperti Anda mendekati apa pun yang Anda lakukan dengan cara yang salah?
Letharion
1
Saya tidak dapat menjelaskan mengapa orang lain ingin melakukannya, tetapi dalam kasus saya, saya menambahkan template Underscore JS ke halaman untuk blok yang memerlukannya. Namun, beberapa blok dapat menggunakan satu templat sehingga saya ingin menambahkan semua templat ke bagian bawah halaman sehingga saya dapat dengan mudah melihat apakah sudah dimuat atau tidak. Bagi saya itu pada dasarnya adalah hal estetika / kenyamanan.
drebabels
Maaf jika saya lambat, tapi itu tidak masuk akal bagi saya? Dengan manfaat cache / agregasi / etc dari #attached , yang dapat digunakan lebih dari pada formulir, saya masih tidak mengerti mengapa.
Letharion
Saya tidak mengetahui fleksibilitas #attached, jadi terima kasih telah memperkenalkannya kepada saya. Namun dalam kasus saya, saya menulis konten file template tersebut ke halaman (tidak hanya menautkan ke file), jadi perbaiki saya jika saya salah tetapi saya tidak berpikir manfaat cache / agregasi dari masalah #attached dalam kasus ini karena caching halaman yang sebenarnya akan membereskannya.
drebabels

Jawaban:

23

Setara dengan hook_footer () yang digunakan dalam Drupal 6 adalah untuk mengimplementasikan hook_page_build () , dan mengubah konten $page['page_bottom'], menggunakan kode yang mirip dengan yang berikut ini:

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

Konten $page['page_bottom']adalah output dari html.tpl.php , menggunakan kode berikut:

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

Nilai $page_bottomdiinisialisasi dari template_process_html () menggunakan kode berikut:

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

Perbedaan antara hook_page_alter () dan hook_page_build()yang hook_page_alter()dieksekusi setelah hook_page_build()dan harus digunakan untuk mengubah, atau menghapus konten yang ditambahkan oleh modul lain, sementara hook_page_build()harus digunakan untuk menambahkan konten baru ke halaman.

kiamlaluno
sumber
Terima kasih telah melangkah lebih jauh dengan jawaban ini. Ini sangat membantu.
drebabels