用于在节点缓存上设置到期时间的钩子是什么?

时间:2012-12-29 13:17:57

标签: drupal drupal-6

我想根据节点的发布日期单独缓存一个节点。较旧的节点可以比较新的节点缓存更长的时间。我以为我可以单独使用cache_set进行缓存,但意识到默认情况下缓存了节点,因此最好在缓存上设置到期时间。有关如何做到这一点的任何想法?也许一个钩子?

2 个答案:

答案 0 :(得分:1)

Drupal本身没有节点缓存。如果您为匿名用户启用了页面缓存,则节点的cahced数据可能会分布在三个表中:

  1. cache_content

      

    此表缓存未通过输入过滤器传递的字段的值,例如file_fields或选择了“纯文本”的文本区域。

  2. cache_filter

      

    此表格缓存Rich Text字段的过滤值,例如Body或CCK文本区域,并选择了“Rich Text”。

  3. cache_page

      

    此表缓存匿名访问者所看到的整个redered页面输出

  4. 我不知道如何确切地指出这些缓存行何时到期,因此您将创建一个函数

    如果要根据自定义规则清除特定节点的所有缓存,可以使用cache_clear_all中的HOOK_cron函数来完成此操作。您首先需要确定哪些节点符合缓存删除的条件,然后您可以将cache_clear_all与'cid'通配符参数一起使用。类似的东西(这将进入你的自定义模块中的HOOK_cron函数,并要求设置适当的cron作业):

    <?php
    $wildcard = //Your criteria for the cache_content table;
    cache_clear_all($wildcard, 'cache_content', TRUE);
    
    $wildcard = //Your criteria for the cache_filter table;
    cache_clear_all($wildcard, 'cache_filter', TRUE);
    
    $wildcard = //Your criteria for the cache_page table;
    cache_clear_all($wildcard, 'cache_page', TRUE);
    

    我认为这里的要点是覆盖Drupal的内置缓存到期很困难。

答案 1 :(得分:0)

可能尝试hook_flush_caches(),但我不完全确定这是不是你想要的......只是一个想法。

另一种可能的途径是drupal_page_cache_header()

HTH。 :)