أنا أبحث عن أفضل طريقة لإدراج محتوى HTML عشوائي في صفحة قبل علامة إغلاق النص ، على غرار الطريقة التي تضيف بها drupal_add_js()
JavaScript إلى أسفل الصفحة.
أنا قادم من خلفية Wordpress وفي Wordpress يمكن تحقيق ذلك باستخدام الخطاف wp_footer()
.
لقد نظرت في استخدام hook_page_alter()
، لكنني كنت أتساءل عما إذا كانت هذه هي الطريقة الصحيحة للقيام بذلك أو إذا كانت هناك طريقة أفضل لإنجاز هذه المهمة.
يعادل 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()
لإضافة محتوى جديد إلى الصفحة.