2011-11-30 27 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. 
}