【问题标题】:Fluid-Alias-View-Helper with result of another view helperFluid-Alias-View-Helper 与另一个视图助手的结果
【发布时间】:2016-07-27 10:20:13
【问题描述】:

在我的一个 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:aliasview-helper 的文档说接受的值是其他视图助手,但他们从未给出任何示例。

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

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

【问题讨论】:

    标签: typo3 fluid neoscms


    【解决方案1】:

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

    {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 的解决方案是提供带有参数的数组。但是我错了。

    谷歌搜索“流体内联表示法”将我带到此资源:https://wiki.typo3.org/Fluid_Inline_Notation

    我看到了,我非常接近。参数必须用它们的名字给出,但不能用数组表示法,所以 THIS 产生了预期的输出:

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

    所以我更进一步解决了问题。所以我把这个 sn-p 粘贴到 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 天的时间来解决这个问题,因为文档真的很糟糕。

    【讨论】:

    • 我刚刚遇到了类似的问题,由于您在这里的回答,我注意到我的也没有工作,因为我没有在一个表达式周围加上额外的单引号!谢谢! :) 你必须把它们放在整个表达式周围,即使大括号不在整个表达式周围,就像我的例子一样:arguments={"property:'additionalInfos.{i.index}.infoValue'"}
    【解决方案2】:

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

    {namespace site=Vendor\ExtName\ViewHelpers}
    

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

    【讨论】:

    • 当然命名空间已经设置好了。否则,助手将无法在正常输出&lt;site:randomNumber min="0" max="17" /&gt; 中工作。但我检查了外壳。显然,大小写没有任何区别:&lt;site:randomNumber....&lt;site:RandomNumber.... 确实会导致相同的结果。不过谢谢你让我检查这个!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多