【问题标题】:Drupal + page fragment cachingDrupal + 页面片段缓存
【发布时间】:2011-05-11 11:55:11
【问题描述】:

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

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

但这似乎不起作用。

亲切的问候, 大安

【问题讨论】:

    标签: drupal caching


    【解决方案1】:

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

    请参阅缓存 getter 和 setter(如下)。您可以通过设置唯一的缓存 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

    【讨论】:

      【解决方案2】:

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

      如果这是不可能的,您可以禁用特定页面的缓存,但与您发布的链接的建议相反,我会通过防止页面首先被缓存来做到这一点(而不是删除缓存之后进入)。

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

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

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

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

      很明显,您需要首先清除缓存才能使这些方法中的任何一种起作用,因为它们完全依赖于阻止页面被缓存。他们不会从缓存中删除已经分页的条目。

      【讨论】:

      • 为了从缓存中删除特定页面或路径,有 CacheExlude 模块 (drupal.org/project/cacheexclude),不需要编码。
      • @jhedstrom:很好的提示 - 该模块完全使用选项 3 中建议的方法(hook_init 中的路径和路径别名匹配)。
      • 我在他发布的链接上写了内容。两年的经验让我相信,在大多数情况下,你的方法要好得多,我已经编辑了我的旧帖子以供参考!我要对您的代码片段进行的唯一更改是使用“global $conf; $conf['cache'] = ... ”,因为这更加 Drupalish 并且与 variable_get() 本身的布局方式相匹配。
      【解决方案3】:

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

      【讨论】:

      • 除了像Boost这样的缓存模块会缓存整个页面。
      • +1 - 将非缓存数据放入非缓存块中是最简单的方法。至于防止缓存特定页面,我会添加一个单独的答案。
      • @Kevin:Boost 采用完全不同的缓存方法,从而绕过了 Drupal 的许多内置缓存设置。因此,如果有人使用它,无论如何他都需要在 Boost 模块配置范围内处理他的特定需求。
      • 好的,我可以按照块使用方法,但我有这个问题。内容在主题功能中,而不是在 page.tpl 左右。看来我无法从此主题模板访问该区域。我认为块是在主题生成之后生成的。
      • 这是我的第一个 php 和 drupal 项目,所以可能有问题。但问题是我们正在使用肥皂连接到服务。当用户登录时,我们需要在主题功能中显示一些按钮。但是对于整页缓存,我们会遇到一些问题,因为按钮总是会显示。
      猜你喜欢
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 2011-04-11
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      相关资源
      最近更新 更多