我有一个使用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"
,如果有更好的方法,我一般不想重复输入。
答案 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'}
/>