Drupal +页面片段缓存

时间:2010-11-17 15:29:05

标签: drupal caching

我们的drupal网站有一些用户特定的内容。当我们启用页面缓存时,整个页面正在被缓存。是否可以仅缓存页面的片段。或者指定哪些片段不缓存?甚至可以指定哪些页面不缓存。这样我们就可以在登录时从缓存中删除一些东西。或者在登录时不要使用缓存版本。

我已经找到了这个网站,但它似乎不起作用: http://www.jpstacey.info/blog/2009/03/03/how-to-not-cache-a-particular-drupal-page

但这似乎不起作用。

亲切的问候, 大安

3 个答案:

答案 0 :(得分:6)

首先,我第二个Ran Bar-Ziks建议将“不要缓存”数据放在一个单独的块中,并将该块设置为BLOCK_NO_CACHE,因为这是最简单的解决方案。

如果无法做到这一点,你可以禁用特定页面的缓存,但是与你发布的链接的建议相反,我这样做是为了防止页面首先被缓存(而不是删除缓存)之后的进入)。

为此,您可以在相关页面上临时操作全局缓存配置设置:

// Disable caching for this request cycle
$GLOBALS['conf']['cache'] = FALSE;

您放置此代码的位置取决于您要从缓存中排除的页面:

  • 如果是来自您自己模块的自定义节点类型,则将其放入hook_view
  • 如果要对来自其他模块的节点类型执行此操作,可以将其放在hook_nodeapi()实现的“视图”操作部分中。 **如果在禁用缓存之前添加对节点ID的检查,这也适用于单个节点。
  • 如果您需要根据路径执行此操作,可以将其放在hook_init()实现中,检查路径(或路径别名)以决定是否禁用缓存。

显而易见的是,您需要首先清除缓存中的任何一种方法,因为它们依赖于防止页面被缓存。他们不会从缓存中删除已经分页的条目。

答案 1 :(得分:3)

您可以将不希望缓存的数据放入块中,并使用BLOCK_NO_CACHE来阻止此块缓存。这是非常简单的事情,并在drupal.api中解释:http://api.drupal.org/api/drupal/modules--block--block.module/constant/BLOCK_NO_CACHE/6

答案 2 :(得分:0)

是的!例如,Drupal默认缓存菜单。这通常出现在每一页上。

请参阅缓存getter和setter(下面)。您可以通过设置唯一的缓存ID来创建自己的缓存ID。

http://api.drupal.org/api/drupal/includes--cache.inc/function/cache_get
http://api.drupal.org/api/drupal/includes--cache.inc/function/cache_set