Отключаем кеш на нужных страницах в Drupal
Кеширование анонимов в drupal мера сколь необходимая, столь и неудобная. Большинство страниц на сайте статичны, и использование кеша для них оправдано. Включение его может нарушить работу некоторых динамических страниц, например, страниц, где используются переменные сессии пользователя. Они будут не верно работать для анонимов. Для них кеш надо как то отключать.
Drupal не позволяет избирательно настроить кеш на странице производительности сайта — admin/settings/performance. Но выход есть — немного доработаем drupal, причем штатно через хуки.
Мы будем отключать кеширование в момент инициализации drupal (hook_init), анализируя параметр $_GET[‘q’], тип публикации или что нам ещё взбредет в голову по-анализировать. Т.е. допишем в какой то «свой» модуль myModule вот такой хук:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
function myModule_init() { //отключаем кеширование определенных страниц //в этой строке объявим страницы, которые надо исключить из кеширования //одна строка - один внутренний адрес, либо node/NNN, или адрес, //объявленный через hook_menu $pages = "node/1000 muModule/hookedmenu/path ... ";
if (!$_GET['q']) drupal_init_path();
//Если текущий адрес, совпадает с тем, что указан в нашем списке //то сбрасываем флаг кеширования if (strlen($pages) && (drupal_match_path($_GET['q'], $pages) || drupal_match_path(drupal_get_path_alias($_GET['q']), $pages) )) $GLOBALS['conf']['cache'] = 0;
//Здесь мы проверяем тип публикации, чтобы определить требуется ли кеширование //т.е. можно отменить кеширование для какого то типа(-ов) публикаций //я задал в списке 'type_1', 'type_2' - имена нужных типов if ($node = menu_get_object('node')) { $types = array('type_1', 'type_2' ...); if (in_array($node->type, $types)) $GLOBALS['conf']['cache'] = 0; } } |
Есть и готовая реализация этой вещи в виде отдельного модуля, называется — CacheExclude. Но я, к примеру, не люблю засорять проект такими микро-модулями, смысл которых сводится к 10 строкам кода. Но для изучения know-how — полезность и важность таких модулей сложно переоценить.