web-dev-qa-db-fra.com

Comment supprimer le cache après la mise à jour / suppression / ajout de nouveau contenu à l'aide de crochets?

Nous avons un module de services personnalisés et un site en Drupal 7, et j'ai eu la tâche de supprimer le cache après que l'éditeur ait ajouté du nouveau contenu ou mis à jour les contenus existants.

J'ai lu un module appelé Actions de cache , mais, comme je l'ai dit, je dois créer la fonction sur mon module personnalisé.

De plus, j'ai commencé à lire sur Drupal hooks, mais je n'ai toujours pas la moindre idée de comment implémenter cette tâche. Des suggestions? Merci.

11
Erzei

Il semble que vous ayez déjà un module personnalisé, mais juste au cas où vous n'auriez pas vu le Guide du développeur de module .

Les crochets que vous recherchez sont hook_node_insert() et hook_node_update() , et la fonction pour effacer le cache sera soit cache_clear_all() ou drupal_flush_all_caches . Le premier vous permettra d'effacer des bacs de cache spécifiques (et même des éléments de cache spécifiques), et le second effacera absolument tout.

Par exemple:

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

ou pour effacer uniquement le cache de page statique après la mise à jour d'un nœud:

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

Vous pouvez facilement vider le cache de noeud spécifique après les avoir mis à jour. Ex. :

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

Veuillez noter que vous devez spécifier array('absolute' => TRUE).

1
Ajay Gadhavana