web-dev-qa-db-ja.com

ノードのキャッシュを防止する

drupal 8.のボタンのようなfacebookで作業しています。これで完了しますが、問題が発生しました。モジュールの構成を変更するたびに、すべてをクリアする必要があります変更を有効にするために手動でキャッシュします。

私はこのような「いいね」ボタンを追加しています:

function fblikebutton_node_view(&$build, $node, $display, $type, $lang) {
  $build['fblikebutton'] = [
    '#theme' => 'fblikebutton',
    '#weight' => 100, 
  ];
}

すべてのノードがキャッシュされないようにする方法、または構成が更新された後にプログラムでキャッシュをクリアする方法はありますか?または、ボタンをページに追加する方法を変更するだけですか?

4
Vadim Khamzin

あなたが正確に何を求めているのかは明らかではありません。

@Cottserの答えは、開発中にレンダーキャッシュを無効にするのに適切ですが、パフォーマンスにとって重要なレンダーキャッシュとして、本番サイトで実行する必要はありません。また、レンダーキャッシュをローカルで無効にする場合は、プロダクションと同じ構成で変更を常にテストして、問題を検出してください。

出力しているマークアップが何かで動的な場合は、そのコンテキストをキャッシュキーに追加できます。私の回答を https://drupal.stackexchange.com/a/140777/31 で確認してください。

ユーザーが設定を変更した後でキャッシュをクリアする場合は、Drupal::entityManager()->getViewBuilder('node')->resetCache()を使用してnode_viewキャッシュタグをクリアできます。特定のタグのキャッシュをクリアしたい場合は、そのメソッドにノードIDを渡すか、\Drupal\Core\Cache\Cache::invalidateTags($node->getCacheTags())を使用できます。

レンダリングされたものごとに1つまたは複数のキャッシュタグがあります(ページレスポンスのX-Drupal-Cache-Tagsヘッダーを調べてください。将来的には、それらをよりよく理解するための開発ツールがあるはずです)。それらを含むすべてのキャッシュを自動的にクリアできます。

2
Berdir

ノードエンティティのレンダリングはキャッシュされます。

レンダーキャッシュを無効にするには、settings.phpの下部にある次の行のコメントを外し、sites/example.settings.local.phpsites/default/settings.local.phpにコピーして、Drupalキャッシュをクリアします。

if (file_exists(__DIR__ . '/settings.local.php')) {
  include __DIR__ . '/settings.local.php';
}

詳細は https://www.drupal.org/node/1903374#drupal-render-cache を参照してください。

1
Cottser

CacheExcludeが必要です。ここで見つけることができます。

https://www.drupal.org/project/cacheexclude

カスタマイズされたアプリケーションのインスピレーションを得ることもできます。

0
W.M.