我想根据节点的发布日期单独缓存一个节点。较旧的节点可以比较新的节点缓存更长的时间。我以为我可以单独使用cache_set进行缓存,但意识到默认情况下缓存了节点,因此最好在缓存上设置到期时间。有关如何做到这一点的任何想法?也许一个钩子?
答案 0 :(得分:1)
Drupal本身没有节点缓存。如果您为匿名用户启用了页面缓存,则节点的cahced数据可能会分布在三个表中:
cache_content
此表缓存未通过输入过滤器传递的字段的值,例如file_fields或选择了“纯文本”的文本区域。
cache_filter
此表格缓存Rich Text字段的过滤值,例如Body或CCK文本区域,并选择了“Rich Text”。
cache_page
此表缓存匿名访问者所看到的整个redered页面输出
我不知道如何确切地指出这些缓存行何时到期,因此您将创建一个函数
如果要根据自定义规则清除特定节点的所有缓存,可以使用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)