在我的模块 hook_init 中切换主题时,我应该如何控制 drupal 缓存?
我已经实现了一个 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;
}
我不确定如何正确清除主题缓存(一次清除网站的所有页面)。
现在某些页面上的主题不会改变(使用此代码)。例如,由视图模块创建的页面主题被更改。而静态页面的主题则不然。
当我禁用 drupal 缓存时,一切正常。
请给个工作建议。
将很高兴得到您的帮助!
I have implemented a drupal module to toggle two themes according to server time. Its simplified code is:
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;
}
I am not sure how to correctly clear the theme cache (for all the pages of the site at once).
Right now theme on some pages don't change (using this code). E.g. theme on page, created by Views module, is changed. While the static page's theme is not.
When I disable the drupal cache everything works ok.
Please give a working advice.
Will be glad for your help!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试使用 cache_clear_all()。
它应该清除所有缓存并使主题更改可见。
来自 Drupal api 文档页面:
cache_clear_all($cid = NULL, $table = NULL, $wildcard = FALSE)
您可以使用 clear_cache_all() 并指定参数仅删除某些缓存 ID,而不是删除所有过期的缓存条目。
Try using cache_clear_all().
It should clear all the caches and make the theme change visible.
From the Drupal api docs page:
cache_clear_all($cid = NULL, $table = NULL, $wildcard = FALSE)
You can use clear_cache_all() and specify arguments to only delete certain cache id's instead of deleting all expirable cache entries.