我目前正在开发一个TYPO3扩展程序,我使用两个独立的数组:一个包含有关产品的文本信息( bikes ),第二个包含相应的图像( bikesimages )。在前端模板中,我使用for循环遍历产品。
我的问题:如何使用for循环的迭代器( bikeIterator )来访问第二个数组的相同索引?
<f:for each="{bikes}" as="bike" iteration="bikeIterator">
<div class="teaser-image"><f:image src="{bikesimages.{bikeIterator}}" alt="{bike.manufacturer} {bike.type}" /></div>
这不起作用。如何正确使用迭代器?
答案 0 :(得分:4)
{bikeIterator}
是一个对象本身,您可以使用多个方法/属性。我给你举个例子。如果您有3辆自行车,迭代器会为您提供以下选项:
{bikeIterator.index} = 0
{bikeIterator.cycle} = 1
{bikeIterator.isFirst} = 1
{bikeIterator.isLast} = 0
{bikeIterator.isEven} = 0
{bikeIterator.isOdd} = 1
第二辆自行车:
{bikeIterator.index} = 1
{bikeIterator.cycle} = 2
{bikeIterator.isFirst} = 0
{bikeIterator.isLast} = 0
{bikeIterator.isEven} = 1
{bikeIterator.isOdd} = 0
第三辆自行车:
{bikeIterator.index} = 2
{bikeIterator.cycle} = 3
{bikeIterator.isFirst} = 0
{bikeIterator.isLast} = 1
{bikeIterator.isEven} = 0
{bikeIterator.isOdd} = 1
由于TYPO3 8LTS液体具有动态变量分配能力。所以你可以使用这个解决方案:
<f:for each="{bikes}" as="bike" iteration="bikeIterator">
<div class="teaser-image"><f:image src="{bikesimages.{bikeIterator.index}}" alt="{bike.manufacturer} {bike.type}" />
</div>
无论如何,在TYPO3 7LTS或更低版本中你不能像你尝试的那样将{bikeIterator.index}
传递给{bikesimages}
。我建议您实现自己的ViewHelper,它接受{bikeIterator.index}
和{bikesimages}
objectStorage或数组,并返回图像src的路径。
所以你可以在模板中写下:
<f:image src="{myNamespace:myViewHelper(index:bikeIterator.index, bikesImgaes: bikesImages)}" alt="{bike.manufacturer} {bike.type}" />
在你的ViewHelper中你有这样的东西:
/**
* @param integer $index
* @param array $bikesImages
* @return string
*/
public function render($index, $bikesImages) {
return $bikesImages[$index] ?: 'path/to/dummyImage.png';
}