我们的drupal网站有一些用户特定的内容。当我们启用页面缓存时,整个页面正在被缓存。是否可以仅缓存页面的片段。或者指定哪些片段不缓存?甚至可以指定哪些页面不缓存。这样我们就可以在登录时从缓存中删除一些东西。或者在登录时不要使用缓存版本。
我已经找到了这个网站,但它似乎不起作用: http://www.jpstacey.info/blog/2009/03/03/how-to-not-cache-a-particular-drupal-page
但这似乎不起作用。
亲切的问候, 大安答案 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