2010-11-17 48 views
4

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

我发现这个网站已经,但似乎并没有工作:。 http://www.jpstacey.info/blog/2009/03/03/how-to-not-cache-a-particular-drupal-page

但这似乎并不奏效。

亲切的问候, 大安

回答

6

第一,我第二RAN将在一个单独的块中的“不缓存”的数据,并设置块BLOCK_NO_CACHE的酒吧,Ziks建议,因为这是最简单的解决方案。

如果这是不可能的,你可以禁用特定页面的缓存,但与你发布的链接的建议相反,我会通过阻止页面缓存在第一位(而不是删除之后缓存条目)。

要做到这一点,你可以操控全局缓存配置有问题的网页上暂时设置:

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

如果你把这个代码取决于你想从高速缓存中排除的网页:

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

很明显,您需要首先清除缓存,才能使用这些方法,因为它们依赖于防止页面被缓存。它们不会从缓存中删除已分页的条目。

+2

为了从缓存中删除特定的页面或路径,有CacheExlude模块(http://drupal.org/project/cacheexclude),它不需要编码。 – jhedstrom 2010-11-18 04:16:30

+0

@jhedstrom:好提示 - 模块完全使用选项3中建议的方法(hook_init中的路径和pathalias匹配)。 – 2010-11-19 16:40:18

+0

我在他发布的链接上写了内容。两年的经验让我相信,在大多数情况下,你的方式会好得多,而且我已经编辑了我的旧帖子以供参考!我改变你的代码片段的唯一方法是使用“global $ conf; $ conf ['cache'] = ...”,因为这是更多的Drupalish,并匹配如何布置variable_get()。 – 2011-04-06 09:55:45

3

你可以把你不想在块被缓存并使用BLOCK_NO_CACHE以防止缓存该块中的数据。这是非常简单的事,并在drupal.api解释说:http://api.drupal.org/api/drupal/modules--block--block.module/constant/BLOCK_NO_CACHE/6

+0

除了像升压将缓存整个页面缓存模块。 – Kevin 2010-11-17 19:57:04

+0

+1 - 将非缓存数据放入非缓存块将是最简单的方法。至于防止特定页面的缓存,我会添加一个单独的答案。 – 2010-11-17 22:41:22

+0

@Kevin:Boost采用了​​完全不同的方法来缓存,因此绕过了Drupal缓存设置中的许多构建。因此,如果有人使用它,他需要在Boost模块配置范围内处理他的特定需求。 – 2010-11-17 22:43:54