Не кэшируется блок со сниппетом для зарегистрированных пользователей. Как быть?
Не смотря на то, что в Drupal «заявлен по-умолчанию» режим кэширования блоков - BLOCK_CACHE_PER_ROLE(кэшировать для каждой роли), на деле самостоятельно созданный блок сохраняется с режимом BLOCK_NO_CACHE(кэширование блока отключено). Такое положение вещей нас не устраивает. Посему исправляем недоразумение.
Говоря о кэшировании созданного «в ручную» блока мы подразумеваем, что на странице управления производительность(admin/settings/performance) кэширования страниц и блоков сайта у нас уже включено.
Для устранения проблемы с кэшированием созданных блоков предлагаю два варианта решения задачи.
Вариант первый. Предпочтительный.
- Открываем базу данных сайта в phpMyAdmin или в любой другой, используемой вами оболочке к БД.
- Находим таблицу blocks.
- Находим строку интересующего нас модуля.
- Меняем цифру значения режима кэширования в колонке cache нужного нам блока на соответствующую желаемому режиму.
- Сохраняем/применяем изменения.
Кратко напомню соответствие цифр режимам кэширования и суть этих режимов:
| Константы режима кэширования блоков | Цифровое значение | Описание режима |
|---|---|---|
| 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 не тестировал, но в его описании нужный нам функционал, в контексте рассматриваемого нами вопроса, разработчиком заявлен.
Спасибо и за этот материал!
Заглянул в код предложенного модуля "Для лодырей" и обнаружил там ещё 2 варианта:
BLOCK_CACHE_PER_ROLE и BLOCK_CACHE_PER_PAGE == 6
BLOCK_CACHE_PER_USER и BLOCK_CACHE_PER_PAGE == 5
судя по статистике использования модуля (~700 скачиваний) - он работает.