Como excluir o cache após atualizar / excluir / adicionar novo conteúdo usando ganchos?

11

Temos um módulo de serviços personalizados e um site no Drupal 7, e eu tive a tarefa de excluir o cache depois que o editor adiciona novo conteúdo ou atualiza os existentes.

Eu li sobre um módulo chamado Ações de Cache , mas, como eu disse, preciso criar a função no meu módulo personalizado.

Além disso, comecei a ler sobre os ganchos Drupal, mas ainda não tenho idéia de como implementar esta tarefa. Alguma sugestão? Obrigado.

Erzei
fonte
Isso pode ser implementado de algumas maneiras. Com que frequência seu editor atualiza / exclui / adiciona novo conteúdo?
Peter
Muitas vezes, porque usamos o drupal como gerente de dados para criar serviços da web para aplicativos móveis. Eu não sabia exatamente com que frequência adicionamos ou modificamos dados, mas a principal solicitação é limpar o cache toda vez que uma alteração ocorre.
Erzei 24/10/12

Respostas:

12

Parece que você já possui um módulo personalizado, mas, caso não tenha visto o Guia do Desenvolvedor de Módulos .

Os ganchos que você procura são hook_node_insert()e hook_node_update(), e a função para limpar o cache será cache_clear_all()ou drupal_flush_all_caches. O primeiro permitirá que você limpe os compartimentos específicos de cache (e até mesmo os itens específicos), e o segundo limpará absolutamente tudo.

Por exemplo:

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

ou para limpar apenas o cache da página estática após a atualização de um nó:

function MYMODULE_node_update($node) {
  $nodeurl = url('node/'. $node->nid, array('absolute' => TRUE));
  cache_clear_all($nodeurl, 'cache_page');
}
Clive
fonte
Ok, eu entendo. Apenas mais uma pergunta, tenho que adicionar o código no meu arquivo .module ou no arquivo de módulo do nó do drupal?
Erzei
2
Ele vai em seu próprio arquivo de módulo, cortando arquivos de núcleo é um grande não-não em Drupal :)
Clive
1

Você pode limpar facilmente o cache do nó específico após atualizá-los. Ex. :

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

Observe que você deve especificar array('absolute' => TRUE).

Ajay Gadhavana
fonte