Nonaktifkan cache untuk blok tertentu

9

Saya ingin membiarkan halaman terus mendapat manfaat dari mekanisme caching Drupal 8 untuk pengguna anonim, kecuali untuk blok tertentu yang harus diperbarui pada setiap penyegaran halaman mengetahui bahwa mereka dihasilkan dari Views.

Apakah secara teknis memungkinkan? Bagaimana?

Amine
sumber
Seperti yang dicatat oleh GKG, gunakan pengaturan usia maks. Anda juga dapat melakukan ini melalui UI pada formulir edit blok juga.
Saya memiliki masalah ini juga - itu menjengkelkan Drupal tidak berurusan dengan ini secara otomatis. Caching itu baik, tetapi Drupal seharusnya untuk situs web dinamis ...
James

Jawaban:

1

Apa yang ditampilkan oleh tampilan blokir itu?

D8 memiliki tag dan konteks cache yang secara otomatis akan membatalkan blok jika ada perubahan.

Jadi, jika Anda memiliki daftar node, setiap kali node ditambahkan atau diperbarui, blok itu akan diperbarui, tetapi sampai saat itu, versi cache digunakan. Yang jauh lebih baik daripada membangun kembali di setiap halaman.

Ini juga berfungsi dengan cache halaman, halaman-halaman itu akan diperbarui secara otomatis juga.

Banyak, banyak hal hanya bekerja dengan caching di luar kotak, tanpa perlu konfigurasi manual.

Edit (menanggapi komentar):

Acak dengan plugin sortir acak? Itu harus secara otomatis menandai blok itu sebagai non-cacheable. Namun itu tidak mempengaruhi modul cache halaman. Sekarang ada modul cache halaman smartcache / dinamis baru tetapi hanya akan berada dalam beta berikutnya (atau RC!). Itu pada akhirnya akan memungkinkan untuk me-cache sisa halaman dan hanya membangun bagian itu.

Tetapi kasus seperti ini mungkin paling baik diimplementasikan dengan menggunakan beberapa javascript. Jika hanya ada beberapa node yang dapat Anda tampilkan semuanya, disembunyikan secara default dan secara acak membuat salah satunya terlihat. Atau minta URL dengan javascript yang mengembalikan Iklan acak atau bahkan lebih baik kunjungi acak URL N yang masing-masing mengembalikan iklan (misalnya dengan mengembalikan daftar URL dan kemudian memilih salah satu dari mereka. Anda bahkan dapat melakukannya secara langsung untuk URL gambar .

Berdir
sumber
Tampilan mengembalikan simpul acak untuk memvariasikan blok iklan.
Amine
Saya akan menunggu rilis selanjutnya untuk solusi bersihnya :)
Amine
Ya, acak dari plugin Views Random Sort. Saya setuju, dimungkinkan untuk membuat konten blok javascript yang memasukkan daftar entitas dan kemudian memutuskan pada lapisan browser dengan beberapa fungsi acak atau melingkar untuk memilih dan ajax salah satunya. Namun, saya akan memiliki lebih dari satu blok seperti ini di beberapa halaman dan solusi sisi server paling cocok.
Amine
10

Jika ini adalah blok khusus, maka Anda dapat menggunakan API Cache , dan mengatur usia cache maksimal ke 0, misalnya

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

Jika ini adalah blok yang ada, maka Anda dapat mengubahnya untuk menambahkan ini ke dalam render array.

mpdonadio
sumber
Seperti dijelaskan dalam pertanyaan, blok saya adalah blok Tampilan. Saya pikir itu terlalu rumit untuk mengganggu di php / module layer.
Amine
1
Sayangnya, ini tidak berhasil juga (mencobanya). Sepertinya halaman dikirimkan dari pagecache dan berisi blok yang sudah ketinggalan zaman. Tapi saya masih menyelidiki.
Rainer Feike