¿Cómo eliminar el caché después de actualizar / eliminar / agregar nuevo contenido usando ganchos?

11

Tenemos un módulo de servicios personalizados y un sitio en Drupal 7, y tuve la tarea de eliminar el caché después de que el editor agrega contenido nuevo o actualiza los existentes.

Leí sobre un módulo llamado Acciones de caché , pero, como dije, necesito crear la función en mi módulo personalizado.

Además, comencé a leer sobre los ganchos de Drupal, pero aún no tengo idea de cómo implementar esta tarea. ¿Alguna sugerencia? Gracias.

Erzei
fuente
Esto podría implementarse de varias maneras. ¿Con qué frecuencia su editor actualiza / elimina / agrega contenido nuevo?
Peter
Muy a menudo, porque usamos drupal como administrador de los datos para crear servicios web para aplicaciones móviles. No podría decirte exactamente con qué frecuencia agregamos o modificamos datos, pero la solicitud principal es borrar el caché cada vez que ocurre un cambio.
Erzei

Respuestas:

12

Parece que ya tiene un módulo personalizado, pero en caso de que no haya visto la Guía del desarrollador del módulo .

Los ganchos que está buscando son hook_node_insert()y hook_node_update(), y la función para borrar el caché será cache_clear_all()o drupal_flush_all_caches. El primero le permitirá borrar contenedores de caché específicos (e incluso elementos de caché específicos), y el último borrará absolutamente todo.

Por ejemplo:

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

o para borrar solo la memoria caché de la página estática después de que se haya actualizado un nodo:

function MYMODULE_node_update($node) {
  $nodeurl = url('node/'. $node->nid, array('absolute' => TRUE));
  cache_clear_all($nodeurl, 'cache_page');
}
Clive
fuente
Ok, lo entiendo Solo una pregunta más, ¿debo agregar el código en mi archivo .module o en el archivo de módulo de nodo de drupal?
Erzei
2
Va en su propio archivo de módulo, piratear archivos principales es un gran no-no en Drupal :)
Clive
1

Puede borrar fácilmente el caché de nodo específico después de actualizarlos. Ex. :

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

Tenga en cuenta que debe especificarlo array('absolute' => TRUE).

Ajay Gadhavana
fuente