web-dev-qa-db-ja.com

特定のブロックのキャッシュを無効にする

匿名ユーザー向けのDrupal 8キャッシュメカニズムの恩恵をページに継続させたいと思います。ただし、ビューから生成されることを知っているページの更新ごとに更新する必要がある特定のブロックを除きます。

技術的に可能ですか?どうやって?

9
Amine

そのビューブロックは何を示していますか?

D8には、何かが変更された場合にブロックを自動的に無効にするキャッシュタグとコンテキストがあります。

したがって、ノードのリストがある場合、ノードが追加または更新されるたびに、そのブロックは更新されますが、それまでは、キャッシュされたバージョンが使用されます。これは、すべてのページで再構築するよりもはるかに優れています。

また、ページキャッシュでも機能します。これらのページも自動的に更新されます。

多くの、多くのことただ動作する手動で構成する必要なしに、箱から出してキャッシュすることで==。

編集(コメントに対応):

ランダムソートプラグインでランダム?これにより、そのブロックは自動的にキャッシュ不可としてマークされます。ただし、ページキャッシュモジュールには影響しません。新しいsmartcache /動的ページキャッシュモジュールが追加されましたが、次のベータ版(またはRC!)でのみ提供されます。これにより、最終的にページの残りの部分をキャッシュして、その部分を構築することができます。

しかし、このようなケースはおそらくいくつかのJavaScriptを使用して実装するのが最善です。少数のノードしかない場合は、それらをすべて表示し、デフォルトで非表示にして、それらの1つをランダムに表示することができます。または、ランダムな広告を返すJavaScriptでURLをリクエストするか、それぞれが広告を返すN個のURLにランダムにアクセスします(たとえば、URLのリストを返し、そのうちの1つを選択します。イメージURLに対して直接行うこともできます。 。

1
Berdir

これがカスタムブロックの場合、 Cache API を使用して、 cache max age を0に設定できます。

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

それが既存のブロックである場合は、それを変更してレンダー配列に追加できます。

10
mpdonadio