Drupal 8を使用しており、フルビューモードで特定のコンテンツタイプのキャッシュを無効にしたい。
すべての表示モードのキャッシュを無効にする方法を見つけましたが、特定のコンテンツタイプに対してのみ無効にしたいです。
どうやってやるの?
たとえば、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 を参照してください。その問題に従ってください。問題が解決したら、それを実装できます。
しかし、今のところ、追加のチェックを行い、既存のチェックを行う独自のレイジービルダーコールバックをここで切り替えることができます。そして、それはうまくいきます。