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


11

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

キャッシュアクションと呼ばれるモジュールについて読みましたが、私が言ったように、カスタムモジュールで関数を作成する必要があります。

また、Drupalフックについて読み始めましたが、まだこのタスクを実装する方法の手掛かりがありません。助言がありますか?ありがとう。


これはいくつかの方法で実装できます。エディターはどのくらいの頻度で新しいコンテンツを更新/削除/追加しますか?
ピーター

非常に頻繁に、モバイルアプリ用のWebサービスを作成するためのデータのマネージャーとしてdrupalを使用しているためです。データを追加または変更する頻度を正確に伝えることはできませんが、主な要求は、変更が発生するたびにキャッシュをクリアすることです。
Erzei 2012年

回答:


12

すでにカスタムモジュールを入手しているようですが、モジュール開発者ガイドが表示されない場合があります。

あなたが探しているされているフック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');
}

わかりました。もう1つ質問があります。.moduleファイルまたはdrupalのノードモジュールファイルにコードを追加する必要がありますか?
Erzei 2012年

2
それはあなた自身のモジュールファイルに入ります、コアファイルをハッキングすることはDrupalで大きなノーノーです:)
クライヴ

1

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.