TYPO3:如何缓存扩展插件中的某些部分
我有这个扩展插件显示一些客户数据和嵌入式视频(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)。
现在的问题是:是否可以缓存一些插件的某些部分? 我的意思是:静态客户数据不会经常更改,因此缓存将是完美的。但是每次都要检查浏览器代理/使用的视频标签。 我没有找到任何东西 - 或者我搜索错误的方式...
是的,你可以。您可以使用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了。
可以更改某些扩展的渲染以允许渲染零件非缓存。如果扩展程序允许使用自定义stdWrap
设置更改部件(例如,tt_news允许),通常可以这样做。不幸的是,情况通常不是这样。
另一种选择可能是David建议的。具有两个PAGE对象与所述视频的不同typeNum
和扩展渲染定义的每个而PAGE
目的通过TYPO3根据在URL中&类型 GET属性比选择。
你是什么意思?“不幸的是,通常情况并非如此。” =>我不应该这样做,因为这是不好的做法?关于TYPE-Param:如果我假设,如果访问者呼叫http://mypage.com/somepage,我的理解是否正确,那么他应该首先重定向到http://mypage.com/somepage?type=2(例如,当他在iPhone上),然后取悦他,他会得到不同的内容? – Stefan
不,这句话我的意思是很多扩展不幸的是不支持它。关于这个问题,你现在在哪里执行用户代理检测? – tmt
看到我的其他答案。我刚刚意识到,使用Typoscript条件,您应该获得不同的结果,因为每种条件都存储不同的缓存版本。 – tmt
您可以为用户代理检测和内部定义设置一个Typoscript condition,重新定义任何设置,包括不同浏览器的渲染类型。 TYPO3为每个条件创建一个不同的缓存版本。这就是为什么太多的条件导致缓存表增长的原因。
非常感谢您的帮助cascaval和David。
为寻找同样的东西,在这里详细的代码如何,我终于解决了它:
- 设置通过设置&常量插件设置
- 设置的某些条件与定义的设置
- 实施在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.
}
你为什么要在服务器端做这件事?我们通常在TYPO3网站上使用videojs(videojs.com),并在客户端决定要使用哪个视频。这样,TYPO3(和像varnish的反向代理)可以完全缓存网站。 – konsolenfreddy
因为在这个平台上我想尽可能少依赖javascript。 – Stefan