使用一个 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'}
/>
我有一个 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'}
/>