Làm cách nào để chèn HTML ngay trước thẻ đóng cơ thể?


8

Tôi đang tìm cách tốt nhất để chèn nội dung HTML tùy ý vào một trang trước thẻ thân đóng, tương tự như cách drupal_add_js()thêm JavaScript vào cuối trang.

Tôi đến từ nền Wordpress và trong Wordpress, điều này có thể được thực hiện bằng cách sử dụng wp_footer()hook.

Tôi đã xem xét việc sử dụng hook_page_alter(), nhưng tôi đã tự hỏi liệu đây có phải là cách chính xác để làm điều này hay liệu có cách nào tốt hơn để hoàn thành nhiệm vụ này.


1
Những câu hỏi tương tự như thế này cứ thỉnh thoảng lại xuất hiện và tôi luôn tự hỏi tại sao , có cần phải "chèn HTML ngay trước thẻ body" không. Dường như với tôi như bạn đang tiếp cận bất cứ điều gì bạn đang làm sai cách?
Letharion

1
Tôi không thể nói lý do tại sao những người khác muốn làm điều đó, nhưng trong trường hợp của tôi, tôi đang thêm các mẫu Underscore JS vào trang cho các khối yêu cầu chúng. Tuy nhiên, nhiều khối có thể sử dụng một mẫu vì vậy tôi muốn thêm tất cả các mẫu vào cuối trang để tôi có thể dễ dàng xem liệu chúng đã được tải hay chưa. Đối với tôi về cơ bản nó là một điều thẩm mỹ / thuận tiện.
drebabels

Xin lỗi nếu tôi chậm, nhưng điều đó không có ý nghĩa với tôi? Với các lợi ích bộ đệm / tổng hợp / vv của #attached , có thể được sử dụng trên nhiều biểu mẫu, tôi vẫn không hiểu lý do tại sao.
Letharion

Tôi đã không nhận thức được tính linh hoạt của #attached, vì vậy cảm ơn bạn đã giới thiệu nó với tôi. Tuy nhiên, trong trường hợp của tôi, tôi đang viết nội dung của các tệp mẫu đó lên trang (không chỉ liên kết đến các tệp), vì vậy hãy sửa cho tôi nếu tôi sai nhưng tôi không nghĩ rằng lợi ích bộ đệm / tổng hợp của vấn đề #attached trong trường hợp này bởi vì bộ nhớ đệm trang thực tế sẽ chăm sóc nó.
drebabels

Câu trả lời:


23

Tương đương với hook_footer () đã được sử dụng trong Drupal 6 là để triển khai hook_page_build () và thay đổi nội dung của $page['page_bottom'], sử dụng mã tương tự như sau:

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

Nội dung của $page['page_bottom']là đầu ra từ html.tpl.php , sử dụng đoạn mã sau:

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

Giá trị của $page_bottomđược khởi tạo từ template_ process_html () bằng mã sau:

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

Sự khác biệt giữa hook_page_alter ()hook_page_build()được hook_page_alter()thực hiện sau hook_page_build()và nên được sử dụng để thay đổi hoặc xóa nội dung được thêm bởi một mô-đun khác, trong khi hook_page_build()nên được sử dụng để thêm nội dung mới vào trang.


Cảm ơn bạn đã đi trên và hơn với câu trả lời này. Điều này rất hữu ích.
drebabels
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.