html.tpl.php

You are here

Default theme implementation to display the basic html structure of a single Drupal page.

Variables:

  • $css: An array of CSS files for the current page.
  • $language: (object) The language the site is being displayed in. $language->language contains its textual representation. $language->dir contains the language direction. It will either be 'ltr' or 'rtl'.
  • $rdf_namespaces: All the RDF namespace prefixes used in the HTML document.
  • $grddl_profile: A GRDDL profile allowing agents to extract the RDF data.
  • $head_title: A modified version of the page title, for use in the TITLE tag.
  • $head_title_array: (array) An associative array containing the string parts that were used to generate the $head_title variable, already prepared to be output as TITLE tag. The key/value pairs may contain one or more of the following, depending on conditions:

    • title: The title of the current page, if any.
    • name: The name of the site.
    • slogan: The slogan of the site, if any, and if there is no title.
  • $head: Markup for the HEAD section (including meta tags, keyword tags, and so on).
  • $styles: Style tags necessary to import all CSS files for the page.
  • $scripts: Script tags necessary to load the JavaScript files and settings for the page.
  • $page_top: Initial markup from any modules that have altered the page. This variable should always be output first, before all other dynamic content.
  • $page: The rendered page content.
  • $page_bottom: Final closing markup from any modules that have altered the page. This variable should always be output last, after all other dynamic content.
  • $classes String of classes that can be used to style contextually through CSS.

See also

template_preprocess()

template_preprocess_html()

template_process()

File

modules/system/html.tpl.php
View source
  1. <?php
  2. /**
  3. * @file
  4. * Default theme implementation to display the basic html structure of a single
  5. * Drupal page.
  6. *
  7. * Variables:
  8. * - $css: An array of CSS files for the current page.
  9. * - $language: (object) The language the site is being displayed in.
  10. * $language->language contains its textual representation.
  11. * $language->dir contains the language direction. It will either be 'ltr' or 'rtl'.
  12. * - $rdf_namespaces: All the RDF namespace prefixes used in the HTML document.
  13. * - $grddl_profile: A GRDDL profile allowing agents to extract the RDF data.
  14. * - $head_title: A modified version of the page title, for use in the TITLE
  15. * tag.
  16. * - $head_title_array: (array) An associative array containing the string parts
  17. * that were used to generate the $head_title variable, already prepared to be
  18. * output as TITLE tag. The key/value pairs may contain one or more of the
  19. * following, depending on conditions:
  20. * - title: The title of the current page, if any.
  21. * - name: The name of the site.
  22. * - slogan: The slogan of the site, if any, and if there is no title.
  23. * - $head: Markup for the HEAD section (including meta tags, keyword tags, and
  24. * so on).
  25. * - $styles: Style tags necessary to import all CSS files for the page.
  26. * - $scripts: Script tags necessary to load the JavaScript files and settings
  27. * for the page.
  28. * - $page_top: Initial markup from any modules that have altered the
  29. * page. This variable should always be output first, before all other dynamic
  30. * content.
  31. * - $page: The rendered page content.
  32. * - $page_bottom: Final closing markup from any modules that have altered the
  33. * page. This variable should always be output last, after all other dynamic
  34. * content.
  35. * - $classes String of classes that can be used to style contextually through
  36. * CSS.
  37. *
  38. * @see template_preprocess()
  39. * @see template_preprocess_html()
  40. * @see template_process()
  41. *
  42. * @ingroup themeable
  43. */
  44. ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"
  45. "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
  46. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php print $language->language; ?>" version="XHTML+RDFa 1.0" dir="<?php print $language->dir; ?>"<?php print $rdf_namespaces; ?>>
  47. <head profile="<?php print $grddl_profile; ?>">
  48. <?php print $head; ?>
  49. <title><?php print $head_title; ?></title>
  50. <?php print $styles; ?>
  51. <?php print $scripts; ?>
  52. </head>
  53. <body class="<?php print $classes; ?>" <?php print $attributes;?>>
  54. <div id="skip-link">
  55. <a href="#main-content" class="element-invisible element-focusable"><?php print t('Skip to main content'); ?></a>
  56. </div>
  57. <?php print $page_top; ?>
  58. <?php print $page; ?>
  59. <?php print $page_bottom; ?>
  60. </body>
  61. </html>

Related topics

Comments

Equivalent in drupal 6 API is page.tpl.php
http://api.drupal.org/api/drupal/modules--system--page.tpl.php/6

There is not equivalent of html.tpl.php, in Drupal 6. The page.tpl.php file is still used in Drupal 7, but html.tpl.php has been introduced with Drupal 7.

Just a minute ago, I asked... "Ok... So what is it for? I'm a new themer starting for the first time in 7 (although all the tutorials I'm finding are in 6, so I'm still converting...), and I'm getting a lot of errors and everything seems to me to be pointing me to making an html.tpl.php doc, which leads me here, but I don't know what to do now... Thanks for any help!"

I think I figured it out. The answer to my question seems to be something like: html.tpl.php holds all the html header information. I already had an html.tpl.php doc in /modules/system, and if I don't want to make any changes (which I don't) I should just leave it alone.

The thing I need to do differently from Drupal 6 is to write my page.tpl.php document with that in mind. So, cut out all the stuff before my first div, cut out all the stuff after closing my last div, and it seems to have resolved at least one error....

That's pretty much it for page.tpl.php.

When I start from a PSD file, I build an "index.php" file that contains an opening and closing HTML and body tag. Once I'm happy with the markup, I "save as" page.tpl.php, delete the former opening and closing tags, and start adding the Drupal variables (as well as the .info files, etc.). Sounds like you already figured this out but I hope it confirms your conviction.

If you're trying to change the values of some of the variables in this template file, like $page_bottom, in a hook_preprocess_html() implementation, you might find yourself frustrated like I did that your variables seem to be disappearing by the time the page is rendered. Check out what template_process_html() is doing; it's clobbering those variables before html.tpl.php is included. So the short answer is, that instead of doing something like…

<?php
function hook_preprocess_html(&$vars) {
 
$vars['page_bottom'] .= 'foo';
}
?>

You must do…

<?php
function hook_preprocess_html(&$vars) {
 
$vars['page']['page_bottom'][] = array('foo' => array('#markup' => 'foo'));
 
// Or other render array stuff
}
?>

I don't know about a module, but you can manually change the title and add in tags here .../modules/system/html.tpl.php No need to worry, it is just like any HTML based index page I do it on all my sites and it is awesome. This gives you way more control over what the search engines see.

I don't see why we need an separate file for the html, head and body tags. This just makes themeing more complicated. Just frustrated about having to relearn my favorite apps. Everybody does this now.

The idea is that, while you might have multiple page templates, they probably all have the same html header, etc. The html template allows them to be in one place.

See template_process_html for what will actually happen to your variables before they get to the template. You can't just prepare them as specified above. For example, you have to send a $variables['page']['#children'] if you want to send a $variables['page'].