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

11

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

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

De plus, j'ai commencé à lire sur les hooks Drupal, mais je n'ai toujours pas la moindre idée de la façon d'implémenter cette tâche. Aucune suggestion? Merci.

Erzei
la source
Cela pourrait être mis en œuvre de plusieurs manières. À quelle fréquence votre éditeur met-il à jour / supprime / ajoute du nouveau contenu?
Peter
Très souvent, car nous utilisons drupal comme gestionnaire des données pour créer des services web pour les applications mobiles. Je ne pourrais pas vous dire exactement à quelle fréquence nous ajoutons ou modifions des données, mais la demande principale est de vider le cache chaque fois qu'un changement se produit.
Erzei

Réponses:

12

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 vider 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');
}
Clive
la source
Ok, je le comprends. Encore une question, dois-je ajouter le code dans mon fichier .module ou dans le fichier de module de noeud de drupal?
Erzei
2
Il va dans votre propre fichier de module, le piratage des fichiers de base est un gros no-no dans Drupal :)
Clive
1

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).

Ajay Gadhavana
la source