Wie lösche ich den Cache nach dem Aktualisieren / Löschen / Hinzufügen neuer Inhalte mithilfe von Hooks?

11

Wir haben ein benutzerdefiniertes Servicemodul und eine Site in Drupal 7, und ich habe die Aufgabe, den Cache zu löschen, nachdem der Editor neue Inhalte hinzugefügt oder die vorhandenen aktualisiert hat.

Ich habe über ein Modul namens Cache-Aktionen gelesen , aber wie gesagt, ich muss die Funktion auf meinem benutzerdefinierten Modul erstellen.

Außerdem habe ich angefangen, über Drupal-Hooks zu lesen, habe aber noch keine Ahnung, wie diese Aufgabe implementiert werden soll. Irgendwelche Vorschläge? Vielen Dank.

Erzei
quelle
Dies könnte auf verschiedene Arten implementiert werden. Wie oft aktualisiert / löscht / fügt Ihr Editor neue Inhalte hinzu?
Peter
Sehr oft, weil wir Drupal als Manager der Daten verwenden, um Webdienste für mobile Apps zu erstellen. Ich konnte Ihnen nicht genau sagen, wie oft wir Daten hinzufügen oder ändern, aber die Hauptanforderung besteht darin, den Cache bei jeder Änderung zu leeren.
Erzei

Antworten:

12

Es hört sich so an, als hätten Sie bereits ein benutzerdefiniertes Modul, aber für den Fall, dass Sie das Modulentwicklerhandbuch nicht sehen .

Die Hooks, nach denen Sie suchen, sind hook_node_insert()und hook_node_update(), und die Funktion zum Löschen des Caches ist entweder cache_clear_all()oder drupal_flush_all_caches. Mit ersteren können Sie bestimmte Cache-Bins (und sogar bestimmte Cache-Elemente) löschen, und mit letzterem können Sie absolut alles löschen.

Zum Beispiel:

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

oder um nur den statischen Seitencache zu löschen, nachdem ein Knoten aktualisiert wurde:

function MYMODULE_node_update($node) {
  $nodeurl = url('node/'. $node->nid, array('absolute' => TRUE));
  cache_clear_all($nodeurl, 'cache_page');
}
Clive
quelle
Ok, ich verstehe es. Nur noch eine Frage: Muss ich den Code in meine .module-Datei oder in die Node-Module-Datei von drupal einfügen?
Erzei
2
Es geht in Ihre eigene Moduldatei, das Hacken von Kerndateien ist ein großes No-No in Drupal :)
Clive
1

Sie können bestimmte Knotencaches nach dem Aktualisieren problemlos löschen. Ex. ::

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

Bitte beachten Sie, dass Sie angeben müssen array('absolute' => TRUE).

Ajay Gadhavana
quelle