TYPO3 Fluid使用第二个数组的迭代器

时间:2014-07-16 08:11:21

标签: arrays loops content-management-system iteration typo3

我目前正在开发一个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>

这不起作用。如何正确使用迭代器?

1 个答案:

答案 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

由于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&lt; = 7LTS

无论如何,在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';
}