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
<?php

/**
 * @file
 * 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 template_preprocess()
 * @see template_preprocess_html()
 * @see template_process()
 *
 * @ingroup themeable
 */
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"
  "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
<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;
?>>

<head profile="<?php

print $grddl_profile;
?>">
  <?php

print $head;
?>
  <title><?php

print $head_title;
?></title>
  <?php

print $styles;
?>
  <?php

print $scripts;
?>
</head>
<body class="<?php

print $classes;
?>" <?php

print $attributes;
?>>
  <div id="skip-link">
    <a href="#main-content" class="element-invisible element-focusable"><?php

print t('Skip to main content');
?></a>
  </div>
  <?php

print $page_top;
?>
  <?php

print $page;
?>
  <?php

print $page_bottom;
?>
</body>
</html>

Related topics

Comments

josejayesh’s picture

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

kiamlaluno’s picture

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.

Garrett Albright’s picture

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…

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

You must do…

function hook_preprocess_html(&$vars) {
  $vars['page']['page_bottom'][] = array('foo' => array('#markup' => 'foo'));
  // Or other render array stuff
}
baronvoninternet’s picture

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.

info@cgfix.com’s picture

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.

lorenrosen’s picture

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.

Jody Lynn’s picture

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'].