TYPO3:如何仅缓存扩展插件中的某些部分
我有这个扩展,显示一些客户数据和嵌入视频 (MP4)。 它由一个缓存的插件组成,因为数据不会更改,除非 TYPO3 后端中的某人对其进行更改并清除缓存。
我们不想使用新的 HTML5 视频标签来在 iPhone/iPad 和 iPad 上播放视频。没有 Flash 的公司。为了不必在我们的服务器上为每个客户存储多个视频文件,我为 flash 浏览器(例如 Firefox,它不会在 HTML5 标签中播放 MP4 视频万岁)制定了后备方法。此方法检查用户浏览器代理,并根据此获取相应的视频标签(FlahsPlayer 或 HTML5)。
现在问题来了:如果我清除TYPO3-Backend中的缓存,然后使用Firefox(使用Flash)加载插件,那么如果我随后在iPhone上加载页面,我会使用Flashplayer获得缓存版本。 但是,如果我清除 TYPO3-Cache,然后使用 iPhone 加载页面,那么 PC 上的 Firefox 随后将获得 HTML5 版本(不适用于 MP4)。
现在的问题是:是否可以只缓存插件的某些部分? 我的意思是:静态客户数据不会经常更改,因此缓存将是完美的。但每次都应检查浏览器代理/使用的视频标签。 我没有找到任何东西 - 或者我搜索的方式错误......
I have this extension showing some customer data plus an embedded video (MP4).
It consists of a cached Plugin, because the data isn't changed, unless someone in the TYPO3-Backend makes changes to it and clears the Cache.
We wan't to use the new HTML5 Video-Tag to be able to play videos on iPhones/iPads & Co. which don't have Flash. To not have to store multiple videofiles on our servers for each customer, i made a fallback-method for flash-browsers (e.g. Firefox, which won't play MP4-Videos in the HTML5-Tag hurray). This method checks the Users Browser-Agent and upon this takes the corresponding Video-Tag (either FlahsPlayer or HTML5).
And here now comes the problem: if I clear Cache in TYPO3-Backend and then load the plugin with Firefox (uses Flash), then if I afterwards load the page on the iPhone, i get the cached version with Flashplayer.
If however i clear TYPO3-Cache and then load the page with an iPhone, then the Firefox on a PC would afterwards get the HTML5-Version (which doesn't work with MP4).
Now the question: is it possible to just cache some parts of a plugin?
I mean: the static customer data won't change that often and therefore caching would be perfect. But the Browser-Agent/used Video-Tag should be checked every time.
I didn't find anything - or i searched the wrong way...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
可以更改某些扩展的呈现,以允许部分呈现为非缓存。如果扩展允许使用自定义
stdWrap
设置更改部分(例如 tt_news 允许),那么这通常是可能的。不幸的是,情况通常并非如此。另一种选择可能是大卫建议的。有两个页面 对象定义了不同的
typeNum
和视频的扩展渲染,而PAGE
对象则由 TYPO3 根据URL 中的 &type GET 属性。It is possible to alter the rendering of some extensions to allow a part to be rendered non-cached. That's usually possible if the extension allows to alter the parts with your custom
stdWrap
settings (e.g. tt_news allows that). Unfortunately, that's usually not the case.The other option might be what David suggested. Having two PAGE objects defined each with different
typeNum
and extension rendering of the video while thePAGE
object is than chosen by TYPO3 depending on the &type GET attribute in the URL.您可以设置Typoscript条件< /a> 对于用户代理检测和内部定义,重新定义任何设置,包括不同浏览器的渲染类型。 TYPO3 为每个条件创建不同的缓存版本。这实际上就是太多条件导致缓存表增长的原因。
You can set a Typoscript condition for the user-agent detection and inside define, re-define any settings, including the type of rendering for different browsers. TYPO3 creates a different cache version for each condition. That's actually why too many conditions result in a growth of the cache table.
是的,你可以。您可以使用类型参数为您的插件创建虚拟的 2 个页面。然后,您可以使用简单的 Typo3 条件来决定 iPhone 或 Firefox 何时加载页面。类型参数例如用于当前页面的打印页面。不幸的是,这不起作用:
我总是在浏览器窗口中获得默认文本,而且我也不知道如何强制使用 typenum 。
Yes, you can. You can use the type-parameter to have virtual 2 pages with your plugin. Then you can decide when an iphone or a firefox loads the page with simple Typo3 conditions. The type-parameter is used for example for a print-page of the current page. Unfortunatly this doesn't work:
I always get the text default in my browser window and I don't know how to force a typenum, too.
非常感谢 cascaval 和 David 的帮助。
对于任何寻找相同东西的人,这里是我最终如何解决它的详细代码:
在setup.txt中
: 在constants.txt中:
在TypoScript中我设置了以下配置:< /strong>
最后但并非最不重要的一点是,在 PHP 方法中,我使用以下代码来访问设置:
Thanks very much for your help cascaval and David.
For anyone looking for the same thing, here the detailed code how I finally solved it:
in setup.txt:
In constants.txt:
In TypoScript I set the following configuration:
And last but not least in the PHP-Method I used the following code to access the setting: