![](/img/trans.png)
[英]how to: specify multiple selected items in a multi-select element using typo3 fluid?
[英]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。
對於任何尋找同樣事物的人來說,這里是我最終解決它的詳細代碼:
在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.