使用一个 ViewHelper 输出嵌套标签

Output nested tags with one single 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);

我想知道是否有更好的方法来执行此操作,理想情况下我想在我的自定义 ViewHelper 中调用标准 ImageViewHelper::render() 函数。

有什么办法吗?甚至应该这样做吗?

我知道,我可以这样调整我的模板:

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

x:noscript应该是我的自定义 ViewHelper)
并在我的 ViewHelper 中调用 renderChildren()

但是我将不得不重复 src="filename.jpg" width="300" 如果有更好的方法,我通常不喜欢重复输入。

实现你想要的最简单的方法是使用部分。它看起来像这样:

{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'}
/>