如何根据Drupal中的cookie提供不同的页面缓存版本?

时间:2010-08-24 14:07:38

标签: drupal caching cookies drupal-6

任务相对简单:

Drupal网站显示带有缩略图的文章列表。一些访问者希望通过点击按钮/链接查看没有图像的内容,并保存该偏好。

e.g。 http://patterntap.com/collections/index/

alt text

问题是所有访问者都是匿名的,并且在某些流量下,页面缓存已启用。

我的想法是使用一些简单的JavaScript来设置cookie,刷新页面并根据cookie值(或它的存在/不存在)显示或隐藏图像。

除了Drupal很早就提供缓存页面,修改我可以找到的缓存版本的唯一快捷方法是通过hacking include / bootstrap.inc并向body类添加自定义类,然后使用css隐藏图像。

我知道这是一种非常错误的做法。但我想知道是否有办法保存不同版本的页面并提供正确的版本?

编辑:

  • 需要保持相同的uri
  • js显示/隐藏图像而不重新加载并设置cookie已经到位
  • hook_boot()并未真正调用缓存页面,因此无法通过自定义模块
  • 执行此操作
  • .htaccess mods?

编辑/溶液: 最后得到了里米安的建议。但是可以使用我们自己的cache.inc实现来完成任务,如Mobile Tools模块中所示。具体来说,通过扩展cache.inc并更新settings.php以包含

$conf['page_cache_fastpath'] = FALSE;
$conf['cache_inc'] = 'path/to/my/module/my_module_cache.inc';

2 个答案:

答案 0 :(得分:1)

所以让我做对了。如果用户选择,您想在缓存页面上隐藏一些图像吗?

为什么不编写一些jQuery或javascript并将其加载到包含文档其余部分的缓存页面中?

然后,客户端/浏览器会决定运行您的脚本并隐藏图像,具体取决于您将请求传递给该页面或cookie中的一些参数?该脚本会被缓存,只有在您调用它时才会运行。

如果你正在攻击类似的东西,你真的需要重新思考你在做什么。疯! :)

另请参阅cache_get和cache_set:

http://api.drupal.org/api/drupal/includes--cache.inc/6

答案 1 :(得分:1)

我不确定我是否100%理解你想要做什么,但这是我的想法。您的根本问题之一是您尝试在同一个uri上访问本质上不同的内容。

如果这是你想要做的,那么Rimian建议检查chache_get和chache_set可能是值得的。

就个人而言,让我的“缩略图”和“没有缩略图”通过不同的uri访问似乎更清晰。根据您想要完成的内容,GET变量是一个更好的方法。使用这两个选项中的任何一个,您都可以在主题图层隐藏或显示缩略图。具有不同路径或获取变量的页面将单独缓存。

如果您希望访问者能够在没有页面重新加载的情况下切换视图,那么jQuery和cookie可能会满足您的需求。这不需要页面重新加载,来回切换非常简单。