web-dev-qa-db-ja.com

ノードタイプのレンダーキャッシュを無効にする

特定のコンテンツタイプXについて、デフォルトですべてのノードをキャッシュするレンダーキャッシュを無効にする方法はありますか?.

コメントアウトすることで、レンダーキャッシュサイト全体を無効にできることを知っています。

$settings['cache']['bins']['render'] = ‘cache.backend.null’;

settings.local.php。しかし、特定のノードタイプに対してのみレンダーキャッシュを無効にする必要があるため、これは私にとって理想的なアプローチではありません。

また、コンテンツタイプXの認証済みユーザーと匿名ユーザーの両方のキャッシュを無効にする必要があります。

同じ上の任意のポインタは非常にいただければ幸いです。

3
Taher

あなたが言ったように、レンダーキャッシュサイト全体を無効にすることは良い考えではありません。これが1つのコンテンツタイプに必要な場合は、ビューの変更フックでこれを行うことができます。

認証済みユーザーと匿名ユーザーのキャッシュを無効にしたい場合は、キャッシュのmax-age = 0を設定し、内部ページキャッシュのkillスイッチをトリガーする必要があります。

function MYMODULE_node_view_alter(array &$build, Drupal\Core\Entity\EntityInterface $entity, \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display) {
  if ($entity->bundle() == 'article') {
    $build['#cache']['max-age'] = 0;
    \Drupal::service('page_cache_kill_switch')->trigger();
  }
}

同じことをプリプロセスフックのテーマに実装できます。

11
4k4