以编程方式更改活动的Drupal 7主题

时间:2011-11-16 11:40:18

标签: php drupal drupal-7 drupal-modules drupal-theming

以编程方式更改活动的Drupal 7主题的正确方法是什么?我在Drupal 6中使用了$custom_theme,但它在Drupal 7中不起作用。

4 个答案:

答案 0 :(得分:8)

您可以使用hook_custom_theme()

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

如果您需要根据路径选择,那么最好的方法是覆盖特定菜单路由器项目的theme callbackSee here for an example

答案 1 :(得分:1)

虽然我不确定您想要更改主题的条件是什么,但如果您想根据网址,节点类型,分类术语,视图页面等更改主题,那么您可以使用Context模块处理这将为你做这个,你甚至不必编写一行代码。看看这个:http://drupal.org/project/context

这是一个非常有用的模块,与几乎所有着名模块(如面板,欧米茄主题,三角洲等)很好地集成。

答案 2 :(得分:0)

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);
}

答案 3 :(得分:0)

虽然variable_set()适用于hook_install()hook_update_N(),但您不应在模块中使用它。调用variable_set()会清空cache_bootstrap表,这对繁忙站点造成严重影响。

如果您不需要Context的全部功能,我会推荐ThemeKey module。但是,上下文很容易导出版本,而据我所知,没有办法导出ThemeKey规则。