web-dev-qa-db-ja.com

更新時に個々のノードのキャッシュをフラッシュしますか?

更新された場合に個々のノードのキャッシュをフラッシュする方法はありますか? (匿名ユーザーに変更をすぐに表示するためにdrupalのキャッシュ全体をフラッシュする必要はありませんか?(ルールかモジュールか)

6
Nigel Waters

Node_saveを使用している場合、特定のノードのキャッシュは自動的にクリアされます。他の方法を使用してノードを保存している場合は、以下を使用します。

entity_get_controller('node')->resetCache(array($node->nid));
8
Mathankumar

これでうまくいきました。他の回答で提供されたentity_get_controller( 'node')呼び出しが機能しませんでした。

// Clear field cache
$entity->type = 'node';
$entity->id  = 54321;
cache_clear_all("field:$entity->type:$entity->id", 'cache_field');
6
Darrell Duane

私は Views Custom Cache モジュールがあなたのソリューションであると信じています。

通常どおり「Views Custom Cache」モジュールをインストールします。

ビュー設定:

最初の引数はNode IDです。

2番目の引数を追加カスタムグローバル:NULL引数-無視され、特定の方法でビューに影響を与えることはありません-キャッシングを除いて!

「フィルター値が利用できない場合」ルールがトリガーされるように、ビューの生成時にこの引数が存在しないことを確認してください。

ビューに「_node/nid_」などのパスがある場合、nidarg(1)として使用できます。

注:arg()の値(0、1、2 ...)を調整して、以下のコードスニペットのユースケースに一致させます。

グローバルNull引数の場合:フィルター値が使用できない場合/デフォルト値を指定する/ PHPコードを入力:

_$node = node_load(arg(1));
return $node->changed;
_

これで、2番目の引数(グローバルNull引数)は常に新しいノードの更新日(タイムスタンプ)を返し、「カスタムキャッシュ:ビューのすべての引数」キャッシュオプションを使用できます。

グローバルNull引数は適切に無視され、ビューのレンダリングには影響しませんが、キャッシュに影響します。指定されたNode ID + Nodeの更新された日付ペアに対して一意になります。ノードが更新されると、新しいNode更新日(タイムスタンプ)が2番目の引数としてビューに返され、指定したNode IDのビューキャッシュが自動的に更新されます。

回答の参照: https://www.drupal.org/node/2559607#comment-10436015

1
devad