Caching 将TYPO3页面缓存生存期设置为精确的月份(而不是31天)

Caching 将TYPO3页面缓存生存期设置为精确的月份(而不是31天),caching,typo3,typoscript,typo3-6.2.x,Caching,Typo3,Typoscript,Typo3 6.2.x,  我有一个带有TYPO3插件的页面,上面显示了“每月提示”。我在列表模块中填充了项目,开始/结束日期为相应月份 问题是我必须禁用缓存(或将其设置为仅1天)或手动刷新它,否则上个月的提示仍会显示。 我希望缓存页面,但缓存只在每个月的1号之前有效。在后台将页面生存期设置为“1个月”,实际上将生存期设置为2678400秒(31天),这在短于31天的月份内不起作用。或者它背后已经有一个功能,计算当前月份的实际长度!?(我等不及整整一个月去测试了。) 我知道打字脚本中有可用的缓存.lifetime,但您


我有一个带有TYPO3插件的页面,上面显示了“每月提示”。我在列表模块中填充了项目,开始/结束日期为相应月份

问题是我必须禁用缓存(或将其设置为仅1天)或手动刷新它,否则上个月的提示仍会显示。
我希望缓存页面,但缓存只在每个月的1号之前有效。在后台将页面生存期设置为“1个月”,实际上将生存期设置为2678400秒(31天),这在短于31天的月份内不起作用。或者它背后已经有一个功能,计算当前月份的实际长度!?(我等不及整整一个月去测试了。)

我知道打字脚本中有可用的
缓存.lifetime
,但您只能设置整数(以秒为单位)、“无限制”(刷新前无过期)、“默认值”(在config.cache\u period中配置)或stdWrap

我知道上次创建的缓存datetime是通过响应中的“Date”头发送的。所以TYPO3应该在某个地方知道这个时间戳

所以我需要像这样的东西:

<?php
    $dateStart = new DateTime( $pageLastCreated_whencever );
    $dateEnd = new DateTime();
    $dateEnd->modify( 'first day of +1 month' );
    $dateDiff = $dateStart->diff($dateEnd);
    return $dateDiff->format('%s'); // equals cache lifetime
?>

有人能把我推到正确的方向吗?
我希望避免使用用户功能,不过



提前感谢。

随时清除TYPO3中的缓存并没有坏处

我建议您使用,这样您就可以确保在每个月的第一天显示您的更新。然后,您可以在清除缓存后立即使用调度任务重建缓存

编辑

我浏览了一下文档,你肯定能做的就是将
cache\u clearAtMidnight
包装在一个打字条件中,检查是否小于2

这将是进入页面设置的完整打字脚本。不需要php

[dayofmonth < 2]
  config.cache_clearAtMidnight = 1
[global]
[月日<2]
config.cache_clearAtMidnight=1
[全球]

当您发现缓存时间以秒为单位。唯一的解决方案是使用自定义调度程序任务,根据您的需要清除缓存

谢谢您的提示,但是我如何真正实现缓存生存期的自动性,直到下个月的第一天?我不知道我的示例代码是否真的能工作(以及如何在打字稿中工作),也不知道在哪里可以得到上一页创建的日期。我更新了答案。不要为生命担心太多。您的页面将被缓存,直到您将其清除。让我们浏览一个示例:它是2016-07-31 23:59,它将变为2016-08-01 00:00。只有这样,条件才有效,并且设置了您建议的配置。但是午夜已经过去了。这不意味着缓存将在2016-08-02 00:00被清除吗?我知道我可以随时手动刷新缓存,但我希望将页面缓存一段特定(但不是恒定)的时间,并自动刷新缓存(对于此页面)然后,我在文档中提到了关于
config.cache\u clearAtMidnight
:“使用此设置,缓存总是在一天的午夜过期,页面计划在午夜过期。”()---这难道不意味着我还必须计算和设置
缓存周期
缓存超时
?以及如何设置每页的单个缓存生存时间,以及调度程序如何识别和解释它们?这一逻辑将完全取决于您。创建一个带有列“pageid”和“life”的简单表,并检查每个调用是否满足要求。如果完成,您可以调用cachemanager并清除这些页面的缓存。因此,我还需要设置一种后端模块(管理工具),以实际填充和维护每个页面的缓存生存期。或者我必须编写扩展页面配置的扩展,以便能够方便地进行设置…——正如我所说的,我甚至不想使用用户函数。现在我必须写一个完整的扩展。嗯,我想我至少要考虑一下,如果其他事情都失败了……这将是一个简单的<代码>命令控制器< /代码>,它将被用作调度器任务。您已经可以在页面属性中设置缓存标记,然后这些标记将被清除。