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

Fluid-Alias-View-Helper with result of another view helper

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

由于 none 的默认视图助手提供了这样的功能,我开发了自己的视图助手,它需要一个最小值和最大值。在内部,视图助手使用 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:aliasview-helper 的文档说接受的值是其他 view-helper,但他们从未给出任何示例。

我对这种方法完全错了吗?是否根本不可能在流体模板中分配一个简单的变量?

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

应该是{site:randomNumber(min: 1, max:10)}。注意外壳。这是假设您在模板的开头注册了名称空间 site

{namespace site=Vendor\ExtName\ViewHelpers}

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

我又深挖了一下,先尝试输出:

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

第一个,是我需要开始工作才能在别名助手中使用它的那个吗?

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

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

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

来自 PHP 我认为,提供一个带有参数的数组是解决方案。然而我错了

谷歌搜索 "fluid inline notation" 引导我找到这个资源:https://wiki.typo3.org/Fluid_Inline_Notation

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

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

所以我在解决问题上更进了一步。所以我把这个片段粘贴到别名助手中,如下所示:

<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 天的时间来解决这个问题,因为文档真的很糟糕。