[英]Disable Cache in TYPO3 in a USER_INT function
我正在TYPO3项目中工作,在该项目中我必须根据条件动态禁用缓存。 这是一个非常具体的用例,不会经常发生。
我计划使用USER_INT函数,在该函数中将执行检查并在必要时禁用缓存。 USER_INT函数可以完美工作,每次加载页面时都会调用它。
问题是,我无法禁用缓存,或者至少我不知道如何。
该代码,我现在有:
page = PAGE
page {
typeNum = 0
adminPanelStyles = 0
11 = USER_INT
11.userFunc = [COMPANY_NAMESPACE]\PageHandler->checkCache
然后在函数中执行检查:
public function checkCache($content,$conf){
global $TSFE;
$id = $TSFE->id;
if($this->checkIfDisableCache($id)){
//$TSFE->set_no_cache(); // <---- first I tried this one
$TSFE->no_cache=true; // <-----after a while I got despoerate and tried to disable it directly
}
}
我也试着玩配置,它没有用。 有趣的是,如果我直接在印刷文字中进行设置:
config.no_cache = 1
它可以工作,但是由于检查相当复杂,因此我想使用PHP来确定是否应禁用缓存。
我知道我做错了,我只是不知道。 任何帮助将不胜感激:)
如果您看一下pibase(AbstractPlugin)代码,您会发现应该完成$conf['useCacheHash']
和$conf['no_cache']
设置。
https://api.typo3.org/typo3cms/current/html/_abstract_plugin_8php_source.html#l00190
我不认为上述任何一个答案都能真正说明情况。 您在这里有一个catch 22,因为您的USER_INT
是在生成页面缓存项之后执行的。 它在内部的工作方式是首先呈现可缓存的所有内容,然后每个USER_INT
在HTML源代码中输出一个标记,然后将该标记替换。 这样,缓存可以包含带有标记的版本,并且可以呈现这些标记而不必呈现整个页面。
因此,在这种情况下,如果只希望在某些情况下禁用页面缓存,则需要使用自定义的TypoScript条件,该条件只能在特殊情况下设置config.no_cache = 1
。 这样,您可以防止在满足条件的情况下生成高速缓存条目,但可以为每个其他请求保留完整的高速缓存和高速缓存的输出。
请注意,仍然建议您改为将页面中不能缓存的部分创建为USER_INT
对象。 如果有一个用例,在某些情况下您需要禁用整个页面缓存,则表明可能对缓存框架和/或USER_INT
工作方式有误解。 希望以上解释了这些部分。
如果您以USER_INT的身份创建此对象,则它将在主页面呈现之外呈现为非缓存形式。 https://docs.typo3.org/typo3cms/TyposcriptReference/ContentObjects/UserAndUserInt/Index.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.