You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将数据处理器的最大缓存时长传递给FLUIDTEMPLATE以调整缓存?

解决方案

方法1:数据处理器直接修改页面缓存配置

不需要把缓存时长传递给FLUIDTEMPLATE,可在数据处理器中直接调整当前页面的缓存超时时间,让页面缓存到指定时间后自动刷新,重新执行处理器生成对应时段的壁纸列表。

在自定义数据处理器类中添加如下逻辑:

public function process(ProcessingInstruction $processingInstruction, ProcessorInterface $processor)
{
    // 生成目标图片列表
    $imageList = $this->generateTimeBasedImageList();
    // 计算到下一个时段切换点的剩余秒数(比如当前离下一个时段还有30分钟,返回1800)
    $cacheTimeout = $this->calculateTimeToNextSwitch();

    // 获取当前页面的缓存配置并修改超时时间
    $page = $processingInstruction->getContext()->getProperty('page');
    $cacheConfig = $page->getCacheConfiguration();
    $cacheConfig['cache_timeout'] = $cacheTimeout;
    $page->setCacheConfiguration($cacheConfig);

    // 返回图片列表给Fluid模板渲染
    return [
        'imageList' => $imageList
    ];
}

方法2:动态设置FLUIDTEMPLATE自身缓存时长

如果需要单独控制模板片段的缓存(而非整个页面),可让数据处理器返回缓存时长,再通过TypoScript动态覆盖FLUIDTEMPLATE的缓存配置。

  1. 数据处理器返回缓存时长:
public function process(ProcessingInstruction $processingInstruction, ProcessorInterface $processor)
{
    $imageList = $this->generateTimeBasedImageList();
    $cacheDuration = $this->calculateTimeToNextSwitch();

    return [
        'imageList' => $imageList,
        'cacheDuration' => $cacheDuration
    ];
}
  1. 在TypoScript中读取该值并设置模板缓存:
page.10 = FLUIDTEMPLATE
page.10 {
    templateName = WallpaperTemplate
    dataProcessing {
        10 = Your\Extension\DataProcessing\WallpaperProcessor
    }
    cache {
        // 从数据处理器结果中读取缓存时长
        duration.cObject = TEXT
        duration.cObject.data = processedData:cacheDuration
        duration.cObject.intval = 1
    }
}

核心注意事项

  • 缓存时长建议设为到下一个时段切换点的剩余秒数,而非固定时长,确保缓存刚好在时段切换时失效,既保证内容准确又避免频繁刷新影响性能。
  • 若使用页面级缓存,需确保服务器时间同步,避免计算的切换时间出现偏差。

内容的提问来源于stack exchange,提问作者Dr. Dieter Porth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 02:58:15