изменить активную тему Drupal 7 программно - PullRequest
7 голосов
/ 16 ноября 2011

Как правильно изменить активную тему Drupal 7 программно? Я использовал $custom_theme в Drupal 6, но он не работает в Drupal 7.

Ответы [ 4 ]

8 голосов
/ 16 ноября 2011

Вы можете использовать hook_custom_theme():

function mymodule_custom_theme() {
  if ($some_condition_is_true) {
    return 'my_theme';
  }
}

Если вам нужно основать свой выбор на пути, тогда лучший способ - переопределить theme callback для определенных пунктов меню маршрутизатора. См. Здесь пример .

1 голос
/ 02 мая 2012

Хотя я не уверен, что является условием, когда вы хотите изменить тему, но если вы хотите изменить тему на основе URL, типа узла, термина таксономии, просмотра страницы и т. Д., То вы можете справиться с этим с помощью модуля Context который сделает это для вас, и вам даже не нужно писать ни одной строки кода. Проверьте это: http://drupal.org/project/context

Это очень полезный модуль и имеет хорошую интеграцию практически со всеми известными модулями, такими как панели, темы омега, дельта и т. Д.

0 голосов
/ 10 июня 2015

Хотя variable_set() будет работать для hook_install() или hook_update_N(), вы не должны использовать его в модуле. Вызов variable_set() очищает таблицу cache_bootstrap, что серьезно ухудшает производительность занятых сайтов.

Я бы порекомендовал модуль ThemeKey , если вам не нужна полная мощность контекста. Однако контексты легко экспортируются для управления версиями, хотя, насколько я знаю, нет способа экспортировать правила ThemeKey.

0 голосов
/ 14 марта 2015

Переменная Drupal theme_default - это та, которую вы должны установить для переключения темы с помощью функции variable_set .

variable_set('theme_default', 'your_theme_name');

Вы можете изменить тему по умолчанию с помощью hook_update_N , если у вас уже установлен пользовательский модуль. Также убедитесь, что вы вызываете код в hook_install , чтобы запустить его во время установки, если вы хотите поделиться своим модулем с кем-то еще и хотите изменить активную тему во время установки.

/**
 * Implements hook_update_N().
 */
function mymodule_update_7000() {
  $theme_list = array(
    'bootstrap',
    'mytheme',
    'shiny',
  );
  theme_enable($theme_list);
  $theme_default = 'mytheme';
  // The below code would change the default active theme to 'mytheme'
  variable_set('theme_default', $theme_default);
  $admin_theme = 'shiny';
  variable_set('admin_theme', $admin_theme);
}
...