Отключить кеш для определенных блоков

9

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

Это технически возможно? Как?

Амин
источник
Как отметил MPD, используйте настройку максимального возраста. Также вы можете сделать это через пользовательский интерфейс в форме редактирования блока тоже.
У меня тоже есть эта проблема - это раздражает, что Drupal не справляется с этим автоматически. Кэширование - это хорошо, но предполагается, что Drupal предназначен для динамических веб-сайтов ...
Джеймс

Ответы:

1

Что показывает этот блок просмотров?

D8 имеет теги кеша и контексты, которые автоматически аннулируют блок, если что-то изменится.

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

Он также работает с кешем страниц, эти страницы также будут обновляться автоматически.

Многие, многие вещи просто работают с кэшированием из коробки, без необходимости каких-либо ручных настроек.

Редактировать (отвечая на комментарий):

Случайный с плагином случайной сортировки? Это должно автоматически пометить этот блок как не кешируемый. Это, однако, не влияет на модуль кеш страницы. Теперь есть новый модуль SmartCache / динамического кэширования страниц, но он будет только в следующей бета-версии (или RC!). Это в конечном итоге позволит кэшировать оставшуюся часть страницы и просто создать эту часть.

Но такой случай, вероятно, лучше всего реализовать с использованием некоторого JavaScript. Если есть только несколько узлов, вы можете отобразить их все, скрытые по умолчанию и просто случайным образом сделать один из них видимым. Или запросите URL с javascript, который возвращает случайное объявление, или, что еще лучше, посетите случайный из N URL, каждый из которых возвращает объявление (например, вернув список URL и выбрав один из них. Вы можете даже сделать это непосредственно для URL изображения ,

Berdir
источник
Представления возвращают случайный узел для изменения рекламного блока.
Амин
Я буду ждать следующего релиза для чистого решения, так что :)
Amine
Да, случайный случай из плагина Views Random Sort. Я согласен, возможно генерировать контент блока javascript, который помещает в список сущности, а затем решает на уровне браузера с помощью некоторой случайной или циклической функции выбрать и ajax одну из них. Однако на некоторых страницах у меня будет более одного такого блока, и решение на стороне сервера подойдет лучше всего.
Амин
10

Если это пользовательский блок, вы можете использовать Cache API и установить максимальный возраст кэша в 0, например

$build = [
 // ...
 '#cache' => [
   'max-age' => 0,
 ],
];

Если это существующий блок, вы можете изменить его, чтобы добавить его в массив визуализации.

mpdonadio
источник
Как объяснено в вопросе, мой блок является блоком Views. Я думаю, что это слишком сложно, чтобы мешать на уровне php / module.
Амин
1
К сожалению, это все равно не работает (пробовал). Похоже, страница доставляется из pagecache и содержит устаревший блок. Но я все еще расследую.
Райнер Фейке