TYPO3: как кэшировать только некоторые части в плагине расширения - PullRequest
0 голосов
/ 30 ноября 2011

У меня есть это расширение, показывающее некоторые данные о клиентах плюс встроенное видео (MP4). Он состоит из кэшируемого плагина, потому что данные не изменяются, если кто-то в TYPO3-Backend не внесет в него изменения и не очистит кэш.

Мы не хотим использовать новый HTML5 Video-Tag, чтобы иметь возможность воспроизводить видео на iPhone / iPads & Co. без Flash. Чтобы не было необходимости хранить несколько видеофайлов на наших серверах для каждого клиента, я создал резервный метод для flash-браузеров (например, Firefox, который не будет воспроизводить MP4-видео в HTML5-теге ура ). Этот метод проверяет Browser-Agent пользователя и при этом принимает соответствующий Video-Tag (FlahsPlayer или HTML5).

И вот теперь возникает проблема: если я очищаю Cache в TYPO3-Backend, а затем загружаю плагин с Firefox (использует Flash), то, если впоследствии я загружаю страницу на iPhone, я получаю кэшированную версию с Flashplayer. Однако, если я очистлю TYPO3-кэш, а затем загрузлю страницу с iPhone, то Firefox на ПК впоследствии получит HTML5-версию (которая не работает с MP4).

Теперь вопрос: можно ли просто кэшировать некоторые части плагина? Я имею в виду: статические данные клиентов не будут меняться так часто, и поэтому кэширование будет идеальным. Но Browser-Agent / использованный Video-Tag следует проверять каждый раз. Я ничего не нашел - или я искал не тот путь ...

Ответы [ 4 ]

1 голос
/ 01 декабря 2011

Можно изменить отображение некоторых расширений, чтобы разрешить вывод части без кэширования. Обычно это возможно, если расширение позволяет изменять детали с вашими пользовательскими настройками stdWrap (например, tt_news позволяет это). К сожалению, обычно это не так.

Другим вариантом может быть то, что предложил Дэвид. Наличие двух PAGE объектов, каждый из которых определен с различным typeNum и расширенным рендерингом видео, а объект PAGE выбирается TYPO3 в зависимости от & type ПОЛУЧИТЬ атрибут в URL.

1 голос
/ 01 декабря 2011

Вы можете установить Условие Typoscript для обнаружения агента пользователя и внутри определения, переопределить любые настройки, включая тип рендеринга для разных браузеров. TYPO3 создает разные версии кэша для каждого условия. Вот почему на самом деле слишком много условий приводит к увеличению таблицы кеша.

0 голосов
/ 03 декабря 2011

Большое спасибо за помощь, Каскавал и Дэвид.

Для тех, кто ищет то же самое, вот подробный код, как я наконец решил это:

  1. Установите настройки плагина через Setup & Constants
  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

В 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-методе. Я использовал следующий код для доступа к настройке:

if ($is_flash_browser == 1) {  
  // Here comes the flash player stuff.  
} else {  
  // Here comes the HTML5 player stuff.  
}
0 голосов
/ 30 ноября 2011

Да, вы можете.Вы можете использовать параметр типа, чтобы иметь виртуальные 2 страницы с вашим плагином.Затем вы можете решить, когда iphone или firefox загружают страницу с простыми условиями Typo3.Параметр type используется, например, для страницы печати текущей страницы.К сожалению, это не работает:

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

Я всегда получаю текст по умолчанию в окне своего браузера и тоже не знаю, как форсировать типен.

...