在我的一个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的文档说接受的值是其他视图助手,但他们从不提供任何示例。
这种做法我完全错了吗?是否根本无法在流体模板中分配简单变量?
更多信息: 我在网站上有一个滑块,它应该从(几乎)每个页面加载开始。所以我需要抓住这个随机的幻灯片编号,我必须多次在滑块标记中引用它。
答案 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渲染函数的参数名称匹配。