function drupal_theme_initialize

You are here

7 theme.inc drupal_theme_initialize()
8 theme.inc drupal_theme_initialize()

Initializes the theme system by loading the theme.

15 calls to drupal_theme_initialize()
batch_process in includes/form.inc
Processes the batch.
block_admin_display in modules/block/block.admin.inc
Menu callback for admin/structure/block.
block_page_build in modules/block/block.module
Implements hook_page_build().
dashboard_admin_blocks in modules/dashboard/dashboard.module
Page callback: Builds the page for administering dashboard blocks.
dashboard_enable in modules/dashboard/dashboard.install
Implements hook_enable().

... See full list

File

includes/theme.inc, line 70
The theme system, which controls the output of Drupal.

Code

function drupal_theme_initialize() {
  global $theme, $user, $theme_key;

  // If $theme is already set, assume the others are set, too, and do nothing
  if (isset($theme)) {
    return;
  }

  drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE);
  $themes = list_themes();

  // Only select the user selected theme if it is available in the
  // list of themes that can be accessed.
  $theme = !empty($user->theme) && drupal_theme_access($user->theme) ? $user->theme : variable_get('theme_default', 'bartik');

  // Allow modules to override the theme. Validation has already been performed
  // inside menu_get_custom_theme(), so we do not need to check it again here.
  $custom_theme = menu_get_custom_theme();
  $theme = !empty($custom_theme) ? $custom_theme : $theme;

  // Store the identifier for retrieving theme settings with.
  $theme_key = $theme;

  // Find all our ancestor themes and put them in an array.
  $base_theme = array();
  $ancestor = $theme;
  while ($ancestor && isset($themes[$ancestor]->base_theme)) {
    $ancestor = $themes[$ancestor]->base_theme;
    $base_theme[] = $themes[$ancestor];
  }
  _drupal_theme_initialize($themes[$theme], array_reverse($base_theme));

  // Themes can have alter functions, so reset the drupal_alter() cache.
  drupal_static_reset('drupal_alter');

  // Provide the page with information about the theme that's used, so that a
  // later Ajax request can be rendered using the same theme.
  // @see ajax_base_page_theme()
  $setting['ajaxPageState'] = array(
    'theme' => $theme_key,
    'theme_token' => drupal_get_token($theme_key),
  );
  drupal_add_js($setting, 'setting');
}

Comments

In Drupal 6, the equivalent function is init_theme().

To alter the theme for a specific module, look at the hook_custom_theme() function:

<?php
/**
* Implements hook_custom_theme().
* Set admin menu for this module by returning the admin menu's machine-readable name
*/
function YOUR_MODULE_custom_theme() {
  return
$GLOBALS['conf']['admin_theme'];
}
?>