Come eliminare la cache dopo aver aggiornato / eliminato / aggiunto nuovo contenuto usando gli hook?


11

Abbiamo un modulo di servizi personalizzati e un sito in Drupal 7, e ho avuto il compito di eliminare la cache dopo che l'editor ha aggiunto nuovi contenuti o aggiornato quelli esistenti.

Ho letto di un modulo chiamato Cache Actions , ma, come ho già detto, ho bisogno di creare la funzione sul mio modulo personalizzato.

Inoltre, ho iniziato a leggere gli hook di Drupal, ma non ho ancora idea di come implementare questo compito. Eventuali suggerimenti? Grazie.


Questo potrebbe essere implementato in alcuni modi. Con quale frequenza il tuo editor aggiorna / elimina / aggiunge nuovi contenuti?
Peter,

Molto spesso, perché utilizziamo drupal come gestore dei dati per creare servizi Web per app mobili. Non saprei dirti con esattezza con quale frequenza aggiungere o modificare i dati, ma la richiesta principale è svuotare la cache ogni volta che si verifica una modifica.
Erzei,

Risposte:


12

Sembra che tu abbia già un modulo personalizzato, ma nel caso in cui non hai visto la Guida per gli sviluppatori del modulo .

Gli hook che stai cercando sono hook_node_insert()e hook_node_update(), e la funzione per cancellare la cache sarà cache_clear_all()o drupal_flush_all_caches. Il primo ti consentirà di cancellare specifici scomparti della cache (e persino specifici elementi della cache), e il secondo eliminerà assolutamente tutto.

Per esempio:

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

o per cancellare solo la cache della pagina statica dopo l'aggiornamento di un nodo:

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

Ok, lo capisco. Ancora un'altra domanda, devo aggiungere il codice nel mio file .module o nel file del modulo nodo di drupal?
Erzei,

2
Va nel tuo file del modulo, l'hacking dei file core è un grande no-no in Drupal :)
Clive

1

È possibile cancellare facilmente la cache del nodo specifico dopo averli aggiornati. Ex. :

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

Si noti che è necessario specificare array('absolute' => TRUE).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.