function template_preprocess_page

Same name and namespace in other branches
  1. 9 core/includes/theme.inc \template_preprocess_page()
  2. 8.9.x core/includes/theme.inc \template_preprocess_page()
  3. 10 core/includes/theme.inc \template_preprocess_page()
  4. 11.x core/includes/theme.inc \template_preprocess_page()

Preprocess variables for page.tpl.php

Most themes utilize their own copy of page.tpl.php. The default is located inside "modules/system/page.tpl.php". Look in there for the full list of variables.

Uses the arg() function to generate a series of page template suggestions based on the current path.

Any changes to variables in this preprocessor should also be changed inside template_preprocess_maintenance_page() to keep all of them consistent.

See also

drupal_render_page()

template_process_page()

page.tpl.php

File

includes/theme.inc, line 2677

Code

function template_preprocess_page(&$variables) {
    // Move some variables to the top level for themer convenience and template cleanliness.
    $variables['show_messages'] = $variables['page']['#show_messages'];
    foreach (system_region_list($GLOBALS['theme'], REGIONS_ALL, FALSE) as $region_key) {
        if (!isset($variables['page'][$region_key])) {
            $variables['page'][$region_key] = array();
        }
        if ($region_content = drupal_get_region_content($region_key)) {
            $variables['page'][$region_key][]['#markup'] = $region_content;
        }
    }
    // Set up layout variable.
    $variables['layout'] = 'none';
    if (!empty($variables['page']['sidebar_first'])) {
        $variables['layout'] = 'first';
    }
    if (!empty($variables['page']['sidebar_second'])) {
        $variables['layout'] = $variables['layout'] == 'first' ? 'both' : 'second';
    }
    $variables['base_path'] = base_path();
    $variables['front_page'] = url();
    $variables['feed_icons'] = drupal_get_feeds();
    $variables['language'] = $GLOBALS['language'];
    $variables['language']->dir = $GLOBALS['language']->direction ? 'rtl' : 'ltr';
    $variables['logo'] = theme_get_setting('logo');
    $variables['main_menu'] = theme_get_setting('toggle_main_menu') ? menu_main_menu() : array();
    $variables['secondary_menu'] = theme_get_setting('toggle_secondary_menu') ? menu_secondary_menu() : array();
    $variables['action_links'] = menu_local_actions();
    $variables['site_name'] = theme_get_setting('toggle_name') ? filter_xss_admin(variable_get('site_name', 'Drupal')) : '';
    $variables['site_slogan'] = theme_get_setting('toggle_slogan') ? filter_xss_admin(variable_get('site_slogan', '')) : '';
    $variables['tabs'] = menu_local_tabs();
    if ($node = menu_get_object()) {
        $variables['node'] = $node;
    }
    // Populate the page template suggestions.
    if ($suggestions = theme_get_suggestions(arg(), 'page')) {
        $variables['theme_hook_suggestions'] = $suggestions;
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.