Fluid-Alias-View-Helper与另一个视图助手的结果

时间:2016-07-27 10:20:14

标签: typo3 fluid neoscms

在我的一个NEOS模板中,我尝试解决生成随机数(在指定范围内)的简单任务,并将其存储到变量中供以后使用。

由于没有任何默认视图助手提供这样的功能,我开发了自己的视图助手,它需要最小值和最大值。在内部,视图助手使用php rand($min, $max)

以下示例适用于我的模板:

site:RandomNumber(0, 17)

正如预期的那样,它输出一个随机数。但是现在我需要将结果存储到变量中,因为我必须多次使用它。

我遇到了流体别名 -view-helper:

<f:alias map="{number: 33}">
    The number is {number}
</f:alias>

这导致:

The number is 33

现在我希望数字不是33,而是我的RandomNumber - view-helper的结果。

我尝试过这样的事情:

<f:alias map="{number: {site:RandomNumber(0, 17)}}">
    The number is {number}
</f:alias>

然而,这引发了一个异常说:

The argument "map" was registered with type "array", but is of type "string" 
in view helper "TYPO3\Fluid\ViewHelpers\AliasViewHelper"

f:alias view-helper的文档说接受的值是其他视图助手,但他们从不提供任何示例。

这种做法我完全错了吗?是否根本无法在流体模板中分配简单变量?

更多信息: 我在网站上有一个滑块,它应该从(几乎)每个页面加载开始。所以我需要抓住这个随机的幻灯片编号,我必须多次在滑块标记中引用它。

2 个答案:

答案 0 :(得分:2)

我再次深入研究并首先尝试输出:

{site:randomNumber(0,17)}   <- was output as the string, not the expected result
<site:randomNumber min="0" max="17" />  <- this was the expected output

第一个,是我需要在alias-helper中使用它的工作吗?

所以我首先必须确保,第一个有效!

我随机猜测有必要指定参数名称。所以我尝试了这个:

{site:randomNumber({min: 0, max: 17})}

来自PHP我认为,给出带有参数的数组是解决方案。但是我错了。

Google搜索“流畅的内联符号”会引导我访问此资源:https://wiki.typo3.org/Fluid_Inline_Notation

在那里,我看到,我非常接近。参数必须由它们的名称给出,但不能以数组符号形式给出,因此 THIS 产生了预期的输出:

{site:randomNumber(min: 0, max: 17)}

所以我向解决方案迈进了一步。所以我把这个片段粘贴到alias-helper中,如下所示:

<f:alias map="{number: {site:randomNumber(min: 0, max: 17)}}">
    The number is {number}
</f:alias>

然而,这导致了与以前相同的例外。我觉得我很接近,所以猜测将表达式包装成单引号,如:

<f:alias map="{number: '{site:randomNumber(min: 0, max: 17)}'}">
    The number is {number}
</f:alias>

这就是我想要的一切。很难相信人们需要2天时间来解决这个问题,因为文档非常糟糕。

答案 1 :(得分:1)

应该是site。注意外壳。这是假设,您已在模板的开头注册了名称空间{namespace site=Vendor\ExtName\ViewHelpers}

@RequestMapping

编辑:参数必须与ViewHelper渲染函数的参数名称匹配。