У меня есть очень простое (блочное) представление для отображения заголовка узла. Это представление имеет идентификатор из контекстного фильтра URL-адреса и один фильтр для фильтрации по языку содержимого, установленному для страницы (по префиксу URL-адреса). Затем этот блок размещается с помощью Layout Builder в режиме просмотра Full Content для этого типа узла.Представление настроено на использование кэширования на основе тегов. Когда я переключаю страницу туда и обратно между языками; язык заголовка не меняется.
Отключение кэширования представлений исправляет это.
Небольшое копание, и я вижу, что контекст кеша представлений основан на языке интерфейса, но заголовок является содержимым; поэтому он должен быть основан на языке контента. Я видел несколько сообщений о настройке контекста кеша и тегов кеша, но они, похоже, не работают.
До сих пор я пробовал это:
функция mycustom_views_pre_view (ViewExecutable $ view, $ display_id, массив и $ args) {
$language_manager = \Drupal::languageManager();
$langcode = $language_manager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId();
if (isset($view->element['#cache']['contexts']) && is_array($view->element['#cache']['contexts'])) {
foreach ($view->element['#cache']['contexts'] as $key => $context) {
если (stristr($context, 'language_interface')) {
unset($view->element['#cache']['contexts'][$key]);
}
}
$view->element['#cache']['contexts'][] = 'languages:language_content';
$view->element['#cache']['tags'][] = 'language:' . $лангкод;
}
}
Кажется, ничего из этого не помогает.
Возможно ли, что я исправил кэширование представления, но блок все еще не кэшируется должным образом?