web-dev-qa-db-ja.com

特定のコンテンツタイプのキャッシュを無効にする方法は?

Drupal 8を使用しており、フルビューモードで特定のコンテンツタイプのキャッシュを無効にしたい。

すべての表示モードのキャッシュを無効にする方法を見つけましたが、特定のコンテンツタイプに対してのみ無効にしたいです。

どうやってやるの?

2
Victor Pereira

たとえば、max-age 0を設定する必要があります。 hook_node_view()。

function yourmodule_node_view(array &$build, NodeInterface $node, $display, $view_mode) {
  if ($node->getType() == 'yourtype' && $view_mode == 'full') {
    $build['#cache']['max-age'] = 0;
  }
}

とはいえ、キャッシュを機能させる方法を見つけることをお勧めします。 lazy_builderのような概念があり、ノードの大部分をキャッシュして、その中に小さなパーツのみを動的に構築できます。

また、これは匿名ユーザーのページキャッシュを無効にするではないことに注意してください。あなたもそれが必要な場合は、私が試して回避するためにさらにお勧めしますが、それからあなたも必要です:

\Drupal::service('page_cache_kill_switch')->trigger();

更新、回答がコメントに投稿するには長すぎます:

ああ、フラグ。著者のフラグをどのように非表示にしますか?最新のD8およびフラグバージョンを使用していますか?

Flag_entity_view()を見ると、フラグが既に正確に実行していることがわかります。いわゆるレイジービルダーを登録し、プレースホルダーと呼ばれるものを有効にします。これは、ユーザーに応じてフラグ/フラグ解除リンクを表示するために行われます。おそらく、その要素に#accessを設定しているだけでしょう。

フラグにはアクセスフックがあるはずですが、現在は機能しません。 https://www.drupal.org/node/2584299 を参照してください。その問題に従ってください。問題が解決したら、それを実装できます。

しかし、今のところ、追加のチェックを行い、既存のチェックを行う独自のレイジービルダーコールバックをここで切り替えることができます。そして、それはうまくいきます。

5
Berdir

オプションを使用することもできます

no_cache: TRUE

ここで説明されているようにルート宣言で: https://www.drupal.org/node/24635

1
vincenzodb