簡體   English   中英

在USER_INT函數中禁用TYPO3中的緩存

[英]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 這樣,您可以防止在滿足條件的情況下生成高速緩存條目,但可以為每個其他請求保留完整的高速緩存和高速緩存的輸出。

https://docs.typo3.org/typo3cms/TyposcriptSyntaxReference/TypoScriptParserApi/CustomConditions/Index.html

請注意,仍然建議您改為將頁面中不能緩存的部分創建為USER_INT對象。 如果有一個用例,在某些情況下您需要禁用整個頁面緩存,則表明可能對緩存框架和/或USER_INT工作方式有誤解。 希望以上解釋了這些部分。

如果您以USER_INT的身份創建此對象,則它將在主頁面呈現之外呈現為非緩存形式。 https://docs.typo3.org/typo3cms/TyposcriptReference/ContentObjects/UserAndUserInt/Index.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM