Не кэшируется блок со сниппетом для зарегистрированных пользователей. Как быть?

Не смотря на то, что в Drupal «заявлен по-умолчанию» режим кэширования блоков - BLOCK_CACHE_PER_ROLE(кэшировать для каждой роли), на деле самостоятельно созданный блок сохраняется с режимом BLOCK_NO_CACHE(кэширование блока отключено). Такое положение вещей нас не устраивает. Посему исправляем недоразумение.

Говоря о кэшировании созданного «в ручную» блока мы подразумеваем, что на странице управления производительность(admin/settings/performance) кэширования страниц и блоков сайта у нас уже включено.

Для устранения проблемы с кэшированием созданных блоков предлагаю два варианта решения задачи.

Вариант первый. Предпочтительный.

  1. Открываем базу данных сайта в phpMyAdmin или в любой другой, используемой вами оболочке к БД.
  2. Находим таблицу blocks.
  3. Находим строку интересующего нас модуля.
  4. Меняем цифру значения режима кэширования в колонке cache нужного нам блока на соответствующую желаемому режиму.
  5. Сохраняем/применяем изменения.

Кратко напомню соответствие цифр режимам кэширования и суть этих режимов:

Константы режима кэширования блоков Цифровое значение Описание режима
BLOCK_NO_CACHE -1 Блок не должен кэшироваться.
BLOCK_CACHE_PER_ROLE 1 Кэшировать блок для каждой пользовательской роли.
BLOCK_CACHE_PER_USER 2 Кэшировать блок для каждого авторизирующегося на сайте пользователя отдельно.
BLOCK_CACHE_PER_PAGE 4 Кэшировать блок для каждой страницы.
BLOCK_CACHE_GLOBAL 8 Кэшировать блок один раз и навсегда. Для всех ролей, пользователей и страниц будет отображен одинаково.

Вариант второй. Для лодырей.

Состоит в установке стороннего соответствующего модуля. Мне только один такой известен - Block Cache Alter.

Касательно данного варианта признаюсь честно - модуль Block Cache Alter не тестировал, но в его описании нужный нам функционал, в контексте рассматриваемого нами вопроса, разработчиком заявлен.

Dalay

Комментарии

Спасибо и за этот материал!

Заглянул в код предложенного модуля "Для лодырей" и обнаружил там ещё 2 варианта:
BLOCK_CACHE_PER_ROLE и BLOCK_CACHE_PER_PAGE == 6
BLOCK_CACHE_PER_USER и BLOCK_CACHE_PER_PAGE == 5

судя по статистике использования модуля (~700 скачиваний) - он работает.