Создание, продвижение сайтов
40-33-54

Отключаем кеш на нужных страницах в Drupal

05 декабря 2019

Кеширование анонимов в 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 — полезность и важность таких модулей сложно переоценить.

Сделайте заказ с сайта и получите 10% скидку на услугу

Заказ услуги с сайта raybin.ru

Нажимая на кнопку "Получить консультацию", я даю согласие на обработку персональных данных и соглашаюсь c условиями политики конфиденциальности
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
Заказать бесплатную SEO-консультацию

Запрос бесплатной SEO - консультации с сайта raybin.ru

Нажимая на кнопку "Получить консультацию", я даю согласие на обработку персональных данных и соглашаюсь c условиями политики конфиденциальности
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
Письмо в компанию Райбин

Письмо в компанию RAYBIN

Нажимая на кнопку "Получить консультацию", я даю согласие на обработку персональных данных и соглашаюсь c условиями политики конфиденциальности
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.