簡體   English   中英

TYPO3:如何緩存擴展插件中的某些部分

[英]TYPO3: how to cache just some parts in an extension plugin

我有這個擴展顯示一些客戶數據加上嵌入式視頻(MP4)。 它由一個緩存的插件組成,因為數據不會更改,除非TYPO3-Backend中有人對其進行更改並清除緩存。

我們不想使用新的HTML5視頻標簽,以便能夠在沒有Flash的iPhone / iPad&Co。上播放視頻。 為了不必多videofiles存儲我們對每一個客戶的服務器上,我做了閃光的瀏覽器(如Firefox中,這將不會在HTML5的標簽華友世紀播放MP4,視頻)一個回退方法。 此方法檢查用戶瀏覽器代理,然后執行相應的視頻標記(FlahsPlayer或HTML5)。

現在問題出在這里:如果我在TYPO3-Backend中清除Cache然后用Firefox加載插件(使用Flash),那么如果我之后在iPhone上加載頁面,我將獲得使用Flashplayer的緩存版本。 但是,如果我清除TYPO3-Cache,然后用iPhone加載頁面,那么PC上的Firefox將會獲得HTML5版本(不適用於MP4)。

現在的問題是:是否可以緩存插件的某些部分? 我的意思是:靜態客戶數據不會經常改變,因此緩存是完美的。 但每次都應檢查Browser-Agent /使用過的Video-Tag。 我沒找到任何東西 - 或者我用錯誤的方式搜索過......

可以更改某些擴展的呈現,以允許部分呈現為非緩存。 如果擴展允許使用您的自定義stdWrap設置更改部件(例如tt_news允許),這通常是可能的。 不幸的是,通常情況並非如此。

另一個選擇可能是大衛建議的。 定義了兩個PAGE對象,每個對象具有不同的typeNum和視頻的擴展呈現,而TYPO3選擇的是PAGE對象,具體取決於URL中的 GET屬性。

您可以為用戶代理檢測和內部定義設置Typoscript條件 ,重新定義任何設置,包括不同瀏覽器的呈現類型。 TYPO3為每個條件創建不同的緩存版本。 這就是為什么太多條件會導致緩存表增長的原因。

是的你可以。 您可以使用type-parameter在您的插件中包含虛擬2頁。 然后你可以決定一個iphone或firefox何時用簡單的Typo3條件加載頁面。 type-parameter例如用於當前頁面的打印頁面。 不幸的是,這不起作用:

page = PAGE
page.typeNum = 1
stuff = CASE
stuff.key.field = typeNum
stuff.default = TEXT
stuff.default.value = Default
stuff.1 = TEXT
stuff.1.value = One

我總是在瀏覽器窗口中顯示文本默認值,我也不知道如何強制使用typenum。

非常感謝你幫助cascaval和David。

對於任何尋找同樣事物的人來說,這里是我最終解決它的詳細代碼:

  1. 通過“設置和常量”設置插件設置
  2. 使用定義的設置設置一些條件
  3. 實現PHP方法

在setup.txt中:

plugin.tx_myext_pi3_item.is_flash_browser = {$plugin.tx_myext_pi3_item.is_flash_browser}  

在constants.txt中:

# cat=tx_myext/Browser Capabilities/21; type=boolean; label= Browser-Agent Switch:Switch used to differentiate between flash based and HTML5 based browsers (e.g. for rendering different players).  
plugin.tx_myext_pi3_item.is_flash_browser = 1

在TypoScript中我設置了以下配置:

# Default browser is assumed HTML5 capable:  
plugin.tx_myext.is_flash_browser = 0

# Browser Agent: MSIE prior to version 9.  
[browser = msie] && [version = <9]  
  plugin.tx_myext.is_flash_browser = 1  
[global]

# Browser Agent: Firefox or Opera browser.  
[useragent = *Firefox*] || [useragent = *Opera*]  
  plugin.tx_myext.is_flash_browser = 1  
[global]

# Browser Agent: Google Chrome prior to version 5.  
[useragent = *Chrome*] && [version = <5]  
  plugin.tx_myext.is_flash_browser = 1  
[global]

# Browser Agent: Safari prior to version 3.  
[useragent = *Safari*] && [version = <3]  
  plugin.tx_myext.is_flash_browser = 1  
[global]

# Browser Agent: iPhone, iPad, iPod  
# Must be at the end to override Safari condition if necessary.  
[useragent = *iPhone*] || [useragent = *iPod*] || [useragent = *iPad*]  
  plugin.tx_myext.is_flash_browser = 0  
[global]

最后但並非最不重要的是在PHP-Method中我使用以下代碼來訪問該設置:

if ($is_flash_browser == 1) {  
  // Here comes the flash player stuff.  
} else {  
  // Here comes the HTML5 player stuff.  
}

暫無
暫無

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

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