ฉันจะแทรก HTML ก่อนแท็กปิดเนื้อหาได้อย่างไร


8

ฉันกำลังมองหาวิธีที่ดีที่สุดในการแทรกเนื้อหา HTML ที่กำหนดเองลงในหน้าก่อนแท็กเนื้อหาปิดเช่นเดียวกับวิธีการdrupal_add_js()เพิ่ม JavaScript ที่ด้านล่างของหน้า

ฉันมาจากพื้นหลังของ Wordpress และใน Wordpress นี้สามารถทำได้โดยใช้wp_footer()เบ็ด

ฉันดูใช้hook_page_alter()แล้ว แต่ฉันสงสัยว่านี่เป็นวิธีที่ถูกต้องในการทำเช่นนี้หรือหากมีวิธีที่ดีกว่าในการทำภารกิจนี้ให้สำเร็จ


1
คำถามที่คล้ายกันเช่นนี้ปรากฏขึ้นทุกขณะและฉันมักจะสงสัยว่าทำไมมันจำเป็นต้อง "แทรก HTML ก่อนแท็กร่างกาย" ดูเหมือนว่าฉันจะเข้าใกล้สิ่งที่คุณกำลังทำในทางที่ผิด?
Letharion

1
ฉันไม่สามารถพูดได้ว่าทำไมคนอื่นถึงต้องการทำเช่นนั้น แต่ในกรณีของฉันฉันเพิ่มแม่แบบขีดล่าง JS ไปยังหน้าสำหรับบล็อกที่ต้องใช้ อย่างไรก็ตามบล็อกหลายบล็อกอาจใช้เทมเพลตเดียวดังนั้นฉันจึงต้องการเพิ่มเทมเพลตทั้งหมดที่ด้านล่างของหน้าเพื่อที่ฉันจะได้เห็นว่าพวกเขาโหลดหรือไม่ สำหรับฉันมันเป็นสิ่งที่สวยงาม / สะดวกสบาย
drebabels

ขออภัยถ้าฉันช้า แต่นั่นไม่สมเหตุสมผลสำหรับฉัน ด้วยประโยชน์ของแคช / การรวม / ฯลฯ ของ#attachedซึ่งสามารถใช้ได้กับหลาย ๆ ฟอร์มฉันยังคงไม่เข้าใจสาเหตุ
Letharion

ฉันไม่ได้ตระหนักถึงความเก่งกาจของ #attached ดังนั้นขอขอบคุณที่แนะนำให้ฉัน อย่างไรก็ตามในกรณีของฉันฉันกำลังเขียนเนื้อหาของไฟล์เทมเพลตเหล่านั้นไปยังหน้า (ไม่เพียง แต่เชื่อมโยงไปยังไฟล์) ดังนั้นแก้ไขให้ถูกต้องถ้าฉันผิด แต่ฉันไม่คิดว่าผลประโยชน์แคช / การรวมของ #attached เรื่องในกรณีนี้ เพราะแคชหน้าจริงจะดูแลมัน
drebabels

คำตอบ:


23

สิ่งที่เทียบเท่ากับ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()ควรใช้เพื่อเพิ่มเนื้อหาใหม่ไปยังหน้า


ขอบคุณสำหรับการทำงานที่เหนือกว่าด้วยคำตอบนี้ สิ่งนี้มีประโยชน์มาก
drebabels
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.