web-dev-qa-db-ja.com

フックを使用して新しいコンテンツを更新/削除/追加した後にキャッシュを削除するにはどうすればよいですか?

Drupal 7にカスタムサービスモジュールとサイトがあり、エディターが新しいコンテンツを追加した後、または既存のコンテンツを更新した後、キャッシュを削除するタスクを取得しました。

Cache Actions と呼ばれるモジュールについて読みましたが、言ったように、カスタムモジュールに関数を作成する必要があります。

また、私はDrupalフックについて読み始めましたが、それでもこのタスクを実装する方法の手掛かりがありません。何か提案がありますか?ありがとう。

11
Erzei

すでにカスタムモジュールを取得しているようですが、念のため Module Developer's Guide が表示されていません。

あなたが探しているフックは hook_node_insert()hook_node_update() で、キャッシュをクリアする関数は- cache_clear_all() または drupal_flush_all_caches 。前者は特定の キャッシュビン (および特定のキャッシュアイテムさえ)をクリアし、後者はすべてを完全にクリアします。

例えば:

function MYMODULE_node_insert($node) {
  drupal_flush_all_caches();
}

または、ノードが更新された後に静的ページキャッシュのみをクリアするには:

function MYMODULE_node_update($node) {
  $nodeurl = url('node/'. $node->nid, array('absolute' => TRUE));
  cache_clear_all($nodeurl, 'cache_page');
}
12
Clive

特定のノードキャッシュを更新した後、それらを簡単にクリアできます。例:

_function MYMODULE_node_update($node) {
  $nodeurl = url('node/'. $node->nid, array('absolute' => TRUE));
  cache_clear_all($nodeurl, 'cache_page');
}
_

array('absolute' => TRUE)を指定する必要があることに注意してください。

1
Ajay Gadhavana