Jak usunąć pamięć podręczną po aktualizacji / usunięciu / dodaniu nowej zawartości za pomocą haków?

11

Mamy moduł usług niestandardowych i witrynę w Drupal 7, i dostałem zadanie usunięcia pamięci podręcznej po dodaniu przez edytora nowej zawartości lub aktualizacji istniejących.

Czytałem o module o nazwie Akcje pamięci podręcznej , ale, jak powiedziałem, muszę utworzyć funkcję w moim module niestandardowym.

Zacząłem też czytać o hakach Drupala, ale wciąż nie mam pojęcia, jak wykonać to zadanie. Jakieś sugestie? Dzięki.

Erzei
źródło
Można to zrealizować na kilka sposobów. Jak często Twój edytor aktualizuje / usuwa / dodaje nowe treści?
Peter
Bardzo często, ponieważ używamy drupala jako menedżera danych do tworzenia usług internetowych dla aplikacji mobilnych. Nie mogłem powiedzieć dokładnie, jak często dodajemy lub modyfikujemy dane, ale głównym żądaniem jest wyczyszczenie pamięci podręcznej za każdym razem, gdy nastąpi zmiana.
Erzei

Odpowiedzi:

12

Wygląda na to, że masz już moduł niestandardowy, ale na wypadek, gdybyś nie zobaczył Przewodnika dla programistów .

Haki których szukasz są hook_node_insert()i hook_node_update(), a funkcja, aby wyczyścić pamięć podręczną będzie albo cache_clear_all()albo drupal_flush_all_caches. Pierwszy pozwoli wyczyścić określone kosze pamięci podręcznej (a nawet określone elementy pamięci podręcznej), a drugi wyczyści absolutnie wszystko.

Na przykład:

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

lub aby wyczyścić tylko statyczną pamięć podręczną strony po zaktualizowaniu węzła:

function MYMODULE_node_update($node) {
  $nodeurl = url('node/'. $node->nid, array('absolute' => TRUE));
  cache_clear_all($nodeurl, 'cache_page');
}
Clive
źródło
Ok, rozumiem to. Jeszcze tylko jedno pytanie, czy muszę dodać kod w pliku .module lub w pliku modułu węzła drupal?
Erzei
2
Wchodzi we własny plik modułu, włamywanie się do podstawowych plików jest w Drupal wielkim nie-nie :)
Clive
1

Możesz łatwo wyczyścić określoną pamięć podręczną węzłów po ich aktualizacji. Dawny. :

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

Pamiętaj, że musisz to określić array('absolute' => TRUE).

Ajay Gadhavana
źródło