特定のビューのキャッシュを無効にするにはどうすればよいですか?


8

特定のビューのキャッシュのクリアを開始するために特定のビューを無効にする必要がある状況に直面しています。

views_invalidate_cache()は、サイト上のすべてのビューについて、キャッシュされたすべてのビューデータをクリアします。

モジュールコード内から特定のビューのキャッシュ無効化をトリガーするにはどうすればよいですか?


回答:


3

あなたが探している関数は、ビューキャッシュプラグインのcache_flushだと思います。


私が間違っている場合は修正してください。ただし、これを実行するには、ビュー全体をスコープ内に含める必要があるようです。もちろんそれは可能ですが、ビュー全体をロードしなくてもcache_flush($ view_id)のように呼び出すことができる関数があるはずです。ちょうど好奇心が強い:-)
sheldonkreger 14年

cache_flushDrupal 6と7だけですか?私はDrupalの8のためのビューモジュールでそれを見ていないよ
Yzmirラミレス

10

クリアするビューの名前がわかっている場合は、次のような関数を呼び出して、そのビューに固有のキャッシュをクリアできます。

/**
 * Function to invalidate selected views caches to enable the action forms to work
 */
function mymodule_invalidate_views_cache($view_name) {
  cache_clear_all('ctools_export:views_view:' . $view_name, 'cache_views', TRUE);
  cache_clear_all($view_name, 'cache_views_data', TRUE);
}

これは、ビューキャッシュが有効になっている(コンテンツキャッシュを使用している)ときに、構成フォームを持つVBOアクションが機能できるようにするために必要でした。これを2回呼び出しました。1回は関数mymodule_myaction_form()で、もう1回は関数mymodule_myaction_submit()で呼び出しました。


1

ビューコンテンツキャッシュの使用検討してください。

通常、関連コンテンツが追加または更新されたときにビューのキャッシュを自動的にクリアするために使用されますが、キャッシュセグメントを監視するためのフレームワークを提供します。私はこれを行っていませんが、開発者向けドキュメントを入手できます。


自分のモジュールコード内からPHPでビューキャッシュをターゲットにする方法を具体的に探しています。これを共有してくれてありがとう、それは他の人を助けるかもしれません。私のキャッシュの問題は、このモジュールには適していません。
sheldonkreger 2014年

1

プロジェクトキャッシュアクションを見てください。それはまさにあなたが望むものを行います。状況に応じてルールを使用できる場合は、カスタムコードを作成する必要さえありません。モジュールをそのまま使用して、特定のビューのキャッシュをクリアするルールを設定するだけです。それ以外の場合は、ビューキャッシュをプログラムでクリアするためのガイドとしてどのように機能するかの内部を確認してください。


ここに上陸する可能性のある他の人にとっては良い情報ですが、PHPコードの特定の場所にあるビューキャッシュをフラッシュする方法が特に必要でした。
sheldonkreger 2014年

0

余計に推測するのではなく、ワニスのようなリバースプロキシキャッシングシステムを検討しましたか?これらは驚くべきパフォーマンスを提供し、ビューやノードなどのdbキャッシングをやや意味のないものにします(多くのログインユーザーがいて、それらのためにこのキャッシングが必要な場合を除きます)。


これは優れた一般的なパフォーマンスのアドバイスですが、私が尋ねた特定の質問には答えません。しかし、良い情報です。
sheldonkreger 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.