[英]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.