Wyłącz pamięć podręczną dla określonych bloków

9

Chciałbym pozwolić stronom nadal korzystać z mechanizmu buforowania Drupal 8 dla anonimowych użytkowników, z wyjątkiem określonych bloków, które powinny aktualizować się przy każdym odświeżeniu strony, wiedząc, że są generowane z widoków.

Czy to technicznie możliwe? W jaki sposób?

Amina
źródło
Jak zauważył MPD, użyj ustawienia maksymalnego wieku. Możesz to również zrobić za pomocą interfejsu użytkownika w formularzu edycji bloku.
Mam też ten problem - denerwujące jest to, że Drupal nie rozwiązuje tego automatycznie. Buforowanie jest dobre, ale Drupal powinien być przeznaczony dla dynamicznych stron internetowych ...
James

Odpowiedzi:

1

Co pokazuje ten widok?

D8 ma tagi pamięci podręcznej i konteksty, które automatycznie unieważnią blok, jeśli coś się zmieni.

Jeśli więc masz listę węzłów, za każdym razem, gdy węzeł jest dodawany lub aktualizowany, blok ten będzie aktualizowany, ale do tego czasu używana jest wersja buforowana. Co jest znacznie lepsze niż przebudowywanie na każdej stronie.

Działa również z pamięcią podręczną stron, strony te również zostaną automatycznie zaktualizowane.

Wiele, wiele rzeczy po prostu działa z buforowaniem po wyjęciu z pudełka, bez potrzeby ręcznej konfiguracji.

Edytuj (w odpowiedzi na komentarz):

Losowo z wtyczką losowego sortowania? To powinno automatycznie oznaczyć ten blok jako niemożliwy do buforowania. Nie wpływa to jednak na moduł pamięci podręcznej strony. Jest teraz nowy moduł smartcache / dynamiczna pamięć podręczna stron, ale będzie ona tylko w następnej wersji beta (lub RC!). To w końcu pozwoli buforować resztę strony i po prostu zbudować tę część.

Ale taki przypadek najlepiej jest zaimplementować za pomocą jakiegoś javascript. Jeśli jest tylko kilka węzłów, możesz wyświetlić je wszystkie, domyślnie ukryte i po prostu losowo uczynić jeden z nich widocznym. Lub poproś o adres URL z javascript, który zwraca losową reklamę, lub jeszcze lepiej odwiedź losową liczbę N adresów URL, z których każdy zwraca reklamę (np. Przez zwrócenie listy adresów URL, a następnie wybranie jednego z nich. Możesz to zrobić bezpośrednio dla adresu URL obrazu .

Berdir
źródło
Widoki zwracają losowy węzeł w celu zmiany bloku reklam.
Amine
Poczekam na następne wydanie czystego rozwiązania, więc :)
Amine
Tak, losowe pochodzi z wtyczki Views Random Sort. Zgadzam się, możliwe jest wygenerowanie treści bloku javascript, która umieszcza na liście podmioty, a następnie decyduje w warstwie przeglądarki za pomocą funkcji losowej lub cyklicznej, aby wybrać jedną z nich. Jednak na niektórych stronach będę mieć więcej niż jeden blok, a rozwiązanie po stronie serwera będzie najlepiej pasować.
Amine
10

Jeśli jest to blok niestandardowy, możesz użyć interfejsu API pamięci podręcznej i ustawić maksymalny wiek pamięci podręcznej na 0, np

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

Jeśli jest to istniejący blok, możesz go zmienić, aby dodać to do tablicy renderowania.

mpdonadio
źródło
Jak wyjaśniono w pytaniu, mój blok to blok widoków. Myślę, że to zbyt skomplikowane, aby ingerować w warstwę php / module.
Amine
1
Niestety to i tak nie działa (wypróbowałem). Wygląda na to, że strona jest dostarczana z pagecache i zawiera nieaktualny blok. Ale wciąż badam.
Rainer Feike