Вывод вложенных тегов с помощью одного ViewHelper

У меня есть проект TYPO3 с расширением, использующим Extbase, и для реализации ленивой загрузки и изображений сетчатки при сохранении совместимости, если javascript отключен, мне нужно сгенерировать такой вывод:

<noscript data-src-small="small.jpg" data-src-large="large.jpg" data-width="300" data-height="200">
  <img src="small.jpg" width="300" height="200">
</noscript>

Поэтому я написал собственный ViewHelper (или, скорее, я скопировал и изменил существующий), который делает именно это, и он работает, но я не уверен, что делаю это правильно, потому что я вручную создаю <img> следующим образом:

$content = '<img class="'.$class.'" alt=" " src="'.$imageSource.'" width="'.$imageInfo[0].'" height="'.$imageInfo[1].'">';
$this->tag->setContent($content);

Интересно, нет ли лучшего способа сделать это, в идеале я бы хотел вызвать стандартную функцию ImageViewHelper::render() внутри моего пользовательского ViewHelper.

Есть ли способ сделать это? Следует ли вообще это делать?

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

<x:noscript src="filename.jpg" width="300">
  <f:image src="filename.jpg" width="300" />
</x:noscript>

(x:noscriptпредполагается, что это мой пользовательский ViewHelper)
и вызовите renderChildren() внутри моего ViewHelper.

Но тогда мне придется повторять src="filename.jpg" width="300", и я обычно не люблю повторять ввод, если есть лучший способ.


person mmgross    schedule 18.02.2015    source источник


Ответы (1)


Самый простой способ добиться желаемого - использовать партиал. Это выглядело бы так:

{namespace x=Yourcompany\Yourproduct\ViewHelpers}
<f:comment>
    Parameters:
     * src:     src of the image
     * width:   Width of the image
</f:comment>

<x:noscript src="{src}" width="{width}">
    <f:image src="{src}" width="{width}" />
</x:noscript>

Вы можете использовать это так:

<f:render
    partial="Path/To/Partial"
    arguments="{width: 300, src: 'filename.jpg'}
/>
person Jost    schedule 18.02.2015
comment
Спасибо. Это означает, что мне действительно не следует писать ViewHelper, который генерирует вложенный вывод? Кроме того, в тот момент, когда я вызываю свой ViewHelper внутри партиала, возможно ли (и желательно) вызывать партиал из партиала? - person mmgross; 18.02.2015
comment
Да, вы можете безопасно вызывать частичные изнутри - я бы рекомендовал это, чтобы части шаблона не становились слишком большими и управляемыми. То же, что и при разбиении программы на более мелкие части (если у вас есть опыт программирования). - person Jost; 18.02.2015