2011-11-30 71 views
0

我有這個擴展插件顯示一些客戶數據和嵌入式視頻(MP4)。 它由一個緩存的Plugin組成,因爲數據不會改變,除非TYPO3-Backend中的某個人對其進行更改並清除緩存。TYPO3:如何緩存擴展插件中的某些部分

我們不想使用新的HTML5視頻標籤,以便能夠在沒有Flash的iPhone/iPad & Co.上播放視頻。爲了不必爲每個客戶在我們的服務器上存儲多個視頻文件,我爲Flash瀏覽器(例如Firefox,它不會在HTML5-Tag hurray中播放MP4視頻)提供了一種後備方法。此方法檢查用戶瀏覽器代理,並在此之後使用相應的視頻標籤(FlahsPlayer或HTML5)。

現在問題來了:如果我清除TYPO3-Backend中的Cache,然後使用Firefox加載插件(使用Flash),那麼如果我之後在iPhone上加載頁面,我會使用Flashplayer獲取緩存版本。 然而,如果我清除TYPO3緩存,然後用iPhone加載頁面,那麼PC上的Firefox將會獲得HTML5版本(它不適用於MP4)。

現在的問題是:是否可以緩存一些插件的某些部分? 我的意思是:靜態客戶數據不會經常更改,因此緩存將是完美的。但是每次都要檢查瀏覽器代理/使用的視頻標籤。 我沒有找到任何東西 - 或者我搜索錯誤的方式...

+1

你爲什麼要在服務器端做這件事?我們通常在TYPO3網站上使用videojs(videojs.com),並在客戶端決定要使用哪個視頻。這樣,TYPO3(和像varnish的反向代理)可以完全緩存網站。 – konsolenfreddy

+0

因爲在這個平臺上我想盡可能少依賴javascript。 – Stefan

回答

0

是的,你可以。您可以使用type-parameter來使用您的插件虛擬2頁。然後,您可以決定iPhone或Firefox何時以簡單的Typo3條件加載頁面。類型參數用於例如當前頁面的打印頁面。不幸的是,這並不工作:

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了。

+0

「type-parameter」是什麼意思?我不確定你指的是什麼。 – Stefan

+0

看到我的答案,我已經解決了我的答案。 – Bytemain

+0

你沒有這樣的例子,不是嗎?從來沒有做過這樣的事情......我的意思是結合使用不同的PHP方法調用 – Stefan

1

可以更改某些擴展的渲染以允許渲染零件非緩存。如果擴展程序允許使用自定義stdWrap設置更改部件(例如,tt_news允許),通常可以這樣做。不幸的是,情況通常不是這樣。

另一種選擇可能是David建議的。具有兩個PAGE對象與所述視頻的不同typeNum和擴展渲染定義的每個而PAGE目的通過TYPO3根據在URL中&類型 GET屬性比選擇。

+0

你是什麼意思?「不幸的是,通常情況並非如此。」 =>我不應該這樣做,因爲這是不好的做法?關於TYPE-Param:如果我假設,如果訪問者呼叫http://mypage.com/somepage,我的理解是否正確,那麼他應該首先重定向到http://mypage.com/somepage?type=2(例如,當他在iPhone上),然後取悅他,他會得到不同的內容? – Stefan

+0

不,這句話我的意思是很多擴展不幸的是不支持它。關於這個問題,你現在在哪裏執行用戶代理檢測? – tmt

+0

看到我的其他答案。我剛剛意識到,使用Typoscript條件,您應該獲得不同的結果,因爲每種條件都存儲不同的緩存版本。 – tmt

1

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

0

非常感謝您的幫助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 

在Typo腳本我設置以下配置:

# 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-方法以下代碼訪問該設置:

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