以编程方式更改活动的Drupal 7主题的正确方法是什么?我在Drupal 6中使用了$custom_theme
,但它在Drupal 7中不起作用。
答案 0 :(得分:8)
您可以使用hook_custom_theme()
:
function mymodule_custom_theme() {
if ($some_condition_is_true) {
return 'my_theme';
}
}
如果您需要根据路径选择,那么最好的方法是覆盖特定菜单路由器项目的theme callback
。 See 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规则。