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

时间:2011-03-24 16:58:00

标签: drupal-6 themes cache-control

我已经实现了一个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缓存时,一切正常。

请提供工作建议。

很高兴为您提供帮助!

1 个答案:

答案 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,而不是删除所有可过期的缓存条目。