¿Cómo inserto HTML justo antes de la etiqueta de cierre del cuerpo?


8

Estoy buscando la mejor manera de insertar contenido HTML arbitrario en una página antes de la etiqueta de cierre del cuerpo, de manera similar a la forma en que drupal_add_js()agrega JavaScript en la parte inferior de una página.

Vengo de un fondo de Wordpress, y en Wordpress esto podría lograrse usando el wp_footer()gancho.

He investigado el uso hook_page_alter(), pero me preguntaba si esta era la forma correcta de hacerlo o si hay una mejor manera de lograr esta tarea.


1
De vez en cuando surgen preguntas similares como esta, y siempre me pregunto por qué , es necesario "insertar HTML justo antes de la etiqueta del cuerpo". ¿Me parece que te estás acercando a lo que estás haciendo de manera incorrecta?
Letharion

1
No puedo hablar de por qué otros quieren hacerlo, pero en mi caso estoy agregando plantillas de subrayado JS a la página para los bloques que los requieren. Sin embargo, varios bloques pueden utilizar una plantilla, por lo que quería agregar todas las plantillas al final de la página para poder ver fácilmente si se han cargado o no. Para mí es básicamente una cuestión de estética / conveniencia.
drebabels

Lo siento si estoy siendo lento, ¿pero eso no tiene sentido para mí? Con los beneficios de caché / agregación / etc. de #attached , que se pueden usar en más de formularios, todavía no entiendo por qué.
Letharion

No era consciente de la versatilidad de #attached, así que gracias por presentármelo. Sin embargo, en mi caso estoy escribiendo el contenido de esos archivos de plantilla en la página (no solo vinculando a los archivos), así que corríjame si estoy equivocado pero no creo que los beneficios de caché / agregación de #adjunto importen en este caso porque el almacenamiento en caché de la página real se encargará de ello.
drebabels

Respuestas:


23

El equivalente de hook_footer () que se usó en Drupal 6 es implementar hook_page_build () y modificar el contenido de $page['page_bottom'], usando un código similar al siguiente:

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

El contenido de $page['page_bottom']se genera desde html.tpl.php , usando el siguiente código:

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

El valor de $page_bottomse inicializa desde template_process_html () usando el siguiente código:

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

La diferencia entre hook_page_alter () y hook_page_build()es que hook_page_alter()se ejecuta después hook_page_build()y debe usarse para alterar o eliminar el contenido agregado por otro módulo, mientras que hook_page_build()debe usarse para agregar nuevo contenido a la página.


Gracias por ir más allá con esta respuesta. Esto es muy útil.
drebabels
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.