Как я должен контролировать drupal кеш при переключении тем в моем модуле hook_init? - PullRequest
0 голосов
/ 24 марта 2011

Я реализовал модуль 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 голосов
/ 24 марта 2011

Попробуйте использовать cache_clear_all () .

Он должен очистить все кэши и сделать изменение темы видимым.


Со страницы API Drupal:
cache_clear_all($cid = NULL, $table = NULL, $wildcard = FALSE)

Параметры

$ cid Если установлено, тоID кэша для удаления.В противном случае все записи кэша, срок действия которых может истечь, будут удалены.

$ table Если установлено, таблица $ table будет удалена из.Обязательный аргумент, если установлен $ cid.

$ wildcard Если $ wildcard равен TRUE, идентификаторы кэша, начинающиеся с $ cid, удаляются в дополнение к точному идентификатору кэша, указанному в $ cid.Если $ wildcard равен TRUE, а $ cid равен '*', тогда вся таблица $ table очищается.

Вы можете использовать clear_cache_all () и указывать аргументы для удаления только определенного кэша.идентификаторы вместо удаления всех записей кэша с истекающим сроком действия.

...