Я использую Drupal 8 для веб-сайта, где некоторые блоки сайта могут иметь различное содержимое в зависимости от значения пользовательской серверной переменной: $_SERVER['X_HTTP_USER_LOCATION']
.
В my_theme_preprocess () я установил $variables['http_location'] = $_SERVER['X_HTTP_USER_LOCATION']
, чтобы сделать его доступным везде.
Эта переменная может содержать 2 различных значения: «глобальное», если запрос поступает из любой точки мира, или «Китай ", если пользователь просматривает из Китая.
Это используется, например, чтобы скрыть некоторые ссылки на социальные сети в нижнем колонтитуле, если пользователь из Китая.
Я хотел бы использоватьКэш Drupal с сохранением двух версий блоков сохранен.
Я попытался:
- Отключить внутренний кэш страниц, как рекомендовано в документации.
- Отключитькеш для тех блоков, которые зависят от переменной
$variables['http_location']
. Это, конечно, замедляет работу веб-сайта. - Устанавливает настраиваемый ключ кэша в каждой функции предварительной обработки, связанной с блоком, который подвержен изменениям, на основе переменной
$variables['http_location']
. - Setнастраиваемый тег кэша в каждой функции предварительной обработки, который привязан к блоку, который может изменяться в зависимости от переменной
$variables['http_location']
.
Что я использовал для деактивации кэша: $variables['#cache']['max-age'] = 0;
(у меня естьс тех пор как удалили эту строку кода)
Что я использовал, чтобы попытаться добавить ключ: $variables['#cache']['keys'][] = "block_name__".$variables['http_location'];
Что я использовал, чтобы попытаться добавить тег: $variables['#cache']['tags'][] = "block_name__".$variables['http_location'];
Установка ключа кеша и тега кеша не работает, как я ожидаю, так как блок визуализируется с помощью $ variable ['http_location'];сохраняя его значение в первой кешированной версии.
Я не очень разбираюсь в Drupal, поэтому вполне возможно, что я смотрю на проблему под неправильным углом.