在我的模块 hook_init 中切换主题时,我应该如何控制 drupal 缓存?

发布于 2024-10-26 03:27:21 字数 759 浏览 0 评论 0原文

我已经实现了一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

好菇凉咱不稀罕他 2024-11-02 03:27:21

尝试使用 cache_clear_all()

它应该清除所有缓存并使主题更改可见。


来自 Drupal api 文档页面:
cache_clear_all($cid = NULL, $table = NULL, $wildcard = FALSE)

参数

$cid 如果设置,则为要删除的缓存 ID。
否则,所有可以的缓存条目
过期删除。

$table 如果设置,则表 $table 为
删除自。强制参数如果
$cid 已设置。

$wildcard 如果 $wildcard 为 TRUE,则缓存
以 $cid 开头的 ID 被删除
除了确切的缓存 ID 之外
由 $cid 指定。如果$通配符是
TRUE 并且 $cid 是 '*' 那么整个
表 $table 已清空。

您可以使用 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)

Parameters

$cid If set, the cache ID to delete.
Otherwise, all cache entries that can
expire are deleted.

$table If set, the table $table to
delete from. Mandatory argument if
$cid is set.

$wildcard If $wildcard is TRUE, cache
IDs starting with $cid are deleted in
addition to the exact cache ID
specified by $cid. If $wildcard is
TRUE and $cid is '*' then the entire
table $table is emptied.

You can use clear_cache_all() and specify arguments to only delete certain cache id's instead of deleting all expirable cache entries.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文