На сайте могут быть установлены 2 темы: одна админская, другая - тема по умолчанию. Чтобы программно изменить тему на некоторых страницах есть как минимум 3 способа:

Использование хука hook_admin_paths_alter

<?php
/**
 * Implements hook_admin_paths_alter().
 */
function MYMODULE_admin_paths_alter(&$paths) {
  $paths['user/*/edit'] = FALSE;
}

Флаг FALSE говорит о том, что должна использоваться дефолтная тема. Флаг TRUE говорит о том, что должна использоваться админская тема. Нужно учитывать, что в шаблоне user//edit символ означает любой символ, включая / (слеш - косая черта). Так, например, путь user/1/products/8/delete будет совпадать с шаблоном user/*/delete, что в свою очередь, может привести к недопониманию.

Использование хука hook_custom_theme

Будет использоваться та тема. название которой вернет хук hook_custom_theme.

<?php
/**
 * Implements hook_custom_theme().
 */
function MYMODULE_custom_theme() {
  if(current_path() == 'product/add'){
    return variable_get('admin_theme');
  }
}

Есть две оговорки:

  1. Если несколько модулей реализуют этот хук, то будет использоваться та тема, которая была возвращена последней. Но можно обойти и эту проблему, используя хук hook_module_implements_alter()
  2. Если текущий путь подпадает под действие шаблонов, возвращенных хуком hook_admin_paths_alter, то тут уже ничего не поделать.

Объявление параметра theme callback в hook_menu

<?php
function hook_menu() {
  $items['example'] = array(
    'title' => 'Example Page',
    'page callback' => 'example_page',
    'access arguments' => array('access content'),
    'theme callback' => 'example_theme_callback',
    'type' => MENU_SUGGESTED_ITEM,
  );
}

function example_theme_callback() {
  return variable_get('admin_theme');
}

Полезные ссылки

Другие посты