使用一个ViewHelper输出嵌套标记

时间:2015-02-18 00:33:22

标签: typo3 fluid view-helpers

我有一个使用Extbase扩展的TYPO3项目,并实现延迟加载和视网膜图像,同时保持兼容性,如果禁用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(或者更确切地说,我复制并修改了一个现有的ViewHelper),它完全正确,并且它可以工作,但我不确定我做得对,因为我&#39; m手动创建<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",如果有更好的方法,我一般不想重复输入。

1 个答案:

答案 0 :(得分: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'}
/>