2016-04-13 3 views
1

Из этого вопроса: Random image with v:iterator.random | cache issueИспользуя выход частичный в качестве переменной в главном шаблоне

Я использую частичный оказывать не-кэшированной материал (в данном случае случайное изображение). я сделать это с помощью этого кода в главном шаблоне:

{v:render.uncache(partial: 'Random-Image', arguments: {iterator: images})} 

Имейте это непосредственно в шаблоне выводит правильно (URL-адрес к изображению, например fileadmin/upload/abc.jpg). Но если я хочу использовать это в качестве переменной для СРК с <f:image он не работает:

<f:image src="{v:render.uncache(partial: 'Random-Image', arguments: {iterator: images})}" alt="alt text" /> 

Также установите в качестве переменной она с v:variable.set не работает.

Все, что я получаю: <!--INT_SCRIPT.0081e57d9fd92c925bb35d79fd9d3f79-->

Кроме того, когда я его отладки:

<f:debug> 
{v:render.uncache(partial: 'Random-Image', arguments: {iterator: images})} 
</f:debug> 

Я получаю <!--INT_SCRIPT.0081e57d9fd92c925bb35d79fd9d3f79-->

Итак, можно ли использовать вывод частично в качестве переменной? Или можно установить переменную в частичном и использовать ее в основном шаблоне?

ответ

1

Я думаю, что вы перепутали две вещи немного, так что я хотел бы разделить ваши вопросы:

1) Можно ли использовать вывод частично в качестве переменной?

Да, как вы этого хотели. На самом деле вы это сделали.

Но давайте видеть тест:

Существует частичный: Тест/Сообщение
с содержанием: «Это тест»

Затем в главном шаблоне вы можете использовать что-то вроде этого:

<div class="test"> 
     <f:if condition="{f:render(partial:'Test/Message')} 
      == 'It is a test'"> 
      <f:then>Passed</f:then> 
      <f:else>Failed</f:else> 
     </f:if> 
    </div> 

в этом случае вы бы увидели «Зачет», и если вы меняете Частичное к «Это должно Failed», то вы получите «Failed» оказаны.

2) Почему вы видите <!--INT_SCRIPT.0081e57d9fd92c925bb35d79fd9d3f79-->?

Это не кешированный контент, так как COA_INT или USR_INT объектов в TypoScript.

Вы можете найти функцию в typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php, ее имя INTincScript_process. Он отвечает за поиск таких строк в коде и заменяет их не кэшированным контентом.

Это означает, что если вы визуализируете свой шаблон, это частичное отображает только ссылку на не кешированный объект, но не на сам контент.

Чтобы предложить решение исходной проблемы, попробуйте сделать изображение целиком в частичном не просто пути к нему. Поэтому включите в партию, где используется v: iterate.random ViewHelper. Затем v: render.uncache должен пометить весь блок изображения как кешируемый.

+0

А .. так, может быть, мой вопрос был немного неправильным. на вашу ** 2) ** часть: можно ли было бы использовать это (вывод '{v: render.uncache') в качестве переменной? Я хотел просто выбрать 1 случайный элемент итератора и использовать его в основном шаблоне (который кэшируется) – nbar

+0

Также вы бы посмотрели мой оригинальный вопрос? Возможно, есть намного лучший способ сделать то, что я хочу, без частичного: http://stackoverflow.com/questions/36597141/random-image-with-viterator-random-cache-issue/36600054#36600054 – nbar

+0

Думаю, вы не может этого достичь. Вы не можете вернуть результат частичного в виде строки или переменной с помощью v: render.uncache, потому что ViewHelper генерирует не кэшируемый контент и поставляет только указатель на него. –

 Смежные вопросы

  • Нет связанных вопросов^_^