我已经实现了一个drupal模块,可以根据服务器时间切换两个主题。它的简化代码是:
function toggle_themes_init() {
global $custom_theme;
$current_theme = variable_get('theme_default', 'garland');
// Determine the daytime
$hours = (int)date('H');
$new_theme = ($hours >= 8 && $hours < 18 ? 'light_theme' : 'dark_theme');
// If the default theme differs from $new_theme
// then we want to clear the theme cache
if ($new_theme != $current_theme) {
variable_set('theme_default', $new_theme);
drupal_rebuild_theme_registry();
}
$custom_theme = $new_theme;
}
我不确定如何正确清除主题缓存(对于网站的所有页面)。
现在某些页面上的主题不会改变(使用此代码)。例如。由Views模块创建的页面主题已更改。虽然静态页面的主题不是。
当我禁用drupal缓存时,一切正常。
请提供工作建议。
很高兴为您提供帮助!
答案 0 :(得分:0)
尝试使用cache_clear_all()。
它应该清除所有缓存并使主题更改可见。
从Drupal api docs页面:
cache_clear_all($cid = NULL, $table = NULL, $wildcard = FALSE)
<强>参数强>
$ cid如果设置,则删除缓存ID。 否则,所有缓存条目都可以 到期已删除。
$ table如果设置,表$ table为 从中删除。强制性论证如果 $ cid已设定。
$ wildcard如果$ wildcard为TRUE,则缓存 以$ cid开头的ID将被删除 除了确切的缓存ID 由$ cid指定。如果$ wildcard是 TRUE和$ cid是'*'然后整个 table $ table清空。
您可以使用clear_cache_all()并指定参数以仅删除某些缓存ID,而不是删除所有可过期的缓存条目。