Рендер узла в Neos

Я скачал плагин Lelesys.Plugin.SlideShow для своего проекта. Это представляет два прототипа NodeType:

prototype(Lelesys.Plugin.SlideShow:SlideShowContainer) < prototype(TYPO3.Neos:Content)
prototype(Lelesys.Plugin.SlideShow:SlideShowContainer) {
  templatePath = 'resource://Lelesys.Plugin.SlideShow/Private/Templates/TypoScript/SlideShowContainer.html'
  slideShowContainerCollection = ${q(node).children('slideShowContainer').children('[instanceof TYPO3.Neos.NodeTypes:Image]')}
  slideShowContainerItemCollection = TYPO3.Neos:ContentCollection
  slideShowContainerItemCollection {
    nodePath = 'slideShowContainer'
  }
  properties = ${node.properties}
}

prototype(Lelesys.Plugin.SlideShow:SlideShowItem) < prototype(TYPO3.Neos.NodeTypes:Image)
prototype(Lelesys.Plugin.SlideShow:SlideShowItem) {
  templatePath = 'resource://Lelesys.Plugin.SlideShow/Private/Templates/TypoScript/SlideShowItem.html'
  slideShowContainerProperty = ${q(node).property('_parent.parent.properties')}
  sliderImageTitle = ${q(node).property('sliderImageTitle')}
  sliderImageDescription = ${q(node).property('sliderImageDescription')}
}

Как видите, он поставляется с предопределенными шаблонами. Я заменил его на свой. В шаблоне для SlideShowContainer у меня примерно такая ситуация:

<f:if condition="{slideShowContainerCollection -> f:count()}>1">
  <f:then>
    <f:for each="{slideShowContainerCollection}" as="slideitem" iteration="slideitemIterator">
      <media:image image="{slideitem.properties.image}" alt="test" />

Это лучшее, что мне удалось сделать на данный момент, использовать TYPO3.Media ImageViewHelper для рендеринга изображения внутри элемента SlideShowItem, который наследуется от TYPO3.Neos.NodeTypes:Image.

Нормальная реализация такова:

{slideShowContainerItemCollection -> f:format.raw()}

Это в основном берет ContentCollection из Neos и полностью отображает его, используя шаблон из SlideShowItem, как и предполагалось.

Теперь, поскольку тип узла SlideShowItem уже связан с шаблоном, я полагаю, что должен быть прямой способ отобразить узлы SlideShowItem с помощью простой команды, автоматически принимая во внимание настроенный шаблон. Что-то типа:

<f:render node="{slideitem}">

Это всего лишь моя фантазия, но должен быть способ рендерить отдельные узлы, когда Neos так легко автоматически генерирует вывод всего набора узлов.

Мое понимание системы узлов и движка Fluid совсем как у новичка. Что было бы ближе всего к тому, что я хочу?


person Tom Arrow    schedule 22.07.2015    source источник


Ответы (1)


Я не совсем уверен, но думаю, что вы можете сделать это с помощью следующего TypoScript

myRenderingOfAnItem = Lelesys.Plugin.SlideShow:SlideShowItem {
  //Custom modifications for you rendering
}

используйте ts: render viewHelper внутри вашего цикла f: for

<ts:render path="myRenderingOfAnItem" context="{node: slideItem}" />

Не забудьте импортировать пространство имен ts в шаблон Fluid.

{namespace ts=TYPO3\TypoScript\ViewHelpers}
person Jan-Erik Revsbech    schedule 19.09.2015