使用钩子更新/删除/添加新内容后如何删除缓存?


11

我们在Drupal 7中有一个自定义服务模块和一个站点,在编辑器添加新内容或更新现有内容之后,我得到了删除缓存的任务。

我已经读过一个名为Cache Actions的模块,但是,正如我所说,我需要在自定义模块上创建该函数。

另外,我已经开始阅读有关Drupal钩子的内容,但仍然不知道如何实现此任务。有什么建议么?谢谢。


这可以通过几种方式来实现。编辑器多久更新/删除/添加一次新内容?
彼得

很多时候,因为我们使用drupal作为数据管理器来为移动应用程序提供Web服务。我无法确切告诉您我们添加或修改数据的频率,但是主要的要求是每次发生更改时都要清除缓存。
Erzei 2012年

Answers:


12

听起来您已经有了一个自定义模块,但是以防万一您没有看到《模块开发人员指南》

您要寻找的钩子是hook_node_insert()and hook_node_update(),而清除缓存的函数将是cache_clear_all()or drupal_flush_all_caches。前者将使您清除特定的缓存箱(甚至特定的缓存项),而后者将清除所有内容。

例如:

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

或仅在更新节点后清除静态页面缓存:

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

好吧,我明白了。只是一个问题,我是否必须将代码添加到我的.module文件或drupal的节点模块文件中?
Erzei 2012年

2
它放在您自己的模块文件中,在Drupal中,黑客入侵核心文件是一件大事:)
Clive

1

您可以在更新特定节点缓存后轻松清除它们。例如 :

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

请注意,您必须指定array('absolute' => TRUE)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.