Рейтинг:2

Почему файлы cookie являются кешем в hook_prepress_node() и как я могу предотвратить или обойти эту проблему?

флаг ng

В Drupal 9 у нас есть хук _preprocess_node(), который загружает файлы cookie пользователей, например:

функция THEME_preprocess_node(&$variables) {


  $ параметры = [];
  если (isset($_COOKIE['utm_source'])){
    $parameters[] = 'utm_source=' . $_COOKIE['utm_source'];
    $parameters['#cache']['contexts'][] = 'cookies:utm_source';
  }
  если (isset($_COOKIE['utm_medium'])){
    $parameters[] = 'utm_medium=' . $_COOKIE['utm_medium'];
    $parameters['#cache']['contexts'][] = 'cookies:utm_medium';
  }
  если (isset($_COOKIE['utm_campaign'])){
    $parameters[] = 'utm_campaign=' . $_COOKIE['utm_campaign'];
    $parameters['#cache']['contexts'][] = 'cookies:utm_campaign';
  }
  $parameters = implode('&', $parameters);

  $переменные['параметры'] = '&' . $ параметры;
}

В моем шаблоне узла:

{{параметры}}

Но он будет загружать кешированные файлы cookie даже от других посетителей, пока кеш не будет очищен.

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

Итак, есть ли другой способ проверки и передачи данных cookie в шаблон узла?

флаг id
Какие контексты кеша вы использовали для отображаемого контента?
quantumized avatar
флаг ng
Извините, я не уверен, что вы имеете в виду под визуализацией контента.Не могли бы вы указать мне правильное место, чтобы найти информацию, чтобы ответить на ваш вопрос?
флаг id
Это почти идентичный вопрос: https://www.drupal.org/project/drupal/issues/2587489
quantumized avatar
флаг ng
Я добавил теги кеша, но он все еще не работает для меня.Я добавил полный код функции в исходное сообщение.
флаг id
Я обновил свой ответ. Согласно уже заданному вопросу, https://drupal.stackexchange.com/questions/189451/cache-in-hook-preprocess-page, где идет настройка кеша.
флаг id
Я предлагаю закрыть этот вопрос как дубликат.
leymannx avatar
флаг ne
Отвечает ли это на ваш вопрос? [Кэш на странице предварительной обработки хука] (https://drupal.stackexchange.com/questions/189451/cache-in-hook-preprocess-page)
quantumized avatar
флаг ng
@leymannx, да, я внедрил подписчика событий и теперь могу правильно загружать значения файлов cookie, но я не понял, как передать эти значения в мой шаблон узла из подписчика событий. Любые идеи по этому поводу? Спасибо!
Рейтинг:4
флаг id

Вы должны принять во внимание кэширование рендеринга. В этом случае вы должны добавить контекст кеша, который ссылается на файл cookie. Есть другие вопросы в этом форуме с примерами, и модуль большой трубы есть еще один:

$has_big_pipe_nojs_cookie = $request->cookies->has(BigPipeStrategy::NOJS_COOKIE);
$page['#cache']['contexts'][] = 'cookies:' . BigPipeStrategy::NOJS_COOKIE;

Вы не показали весь свой код, но я думаю, вам нужно что-то вроде:

$variables['#cache']['contexts'][] = 'cookies:utm_source';
sonfd avatar
флаг in
Можете ли вы показать пример?
флаг id
Я не знаю, что такое $parameters, потому что мы не видим весь ваш код.
sonfd avatar
флаг in
Они находятся в узле предварительной обработки, поэтому им, вероятно, нужно добавить контекст к отображению узла.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.