【问题标题】:TYPO3 Fluid dynamic variable part in inline if conditionTYPO3 内联中的流体动态变量部分 if 条件
【发布时间】:2017-10-09 08:51:58
【问题描述】:

我想检查设置中是否存在配置数组,如果存在,将其作为参数传递给部分。如果不存在,则将默认配置传递给该部分。

我的问题是,我被困在 if 条件下,需要执行检查(then-else 简化如下):

{f:if(condition: settings.media.responsive{f:count(subject: records)}, then: 'true', else: 'false')}

这样的代码不会被 Fluid 解析,只是在页面上按原样输出。 但是没有动态部分它可以完美地工作:

{f:if(condition: settings.media.responsive1, then: 'true', else: 'false')}

输出true

我已经尝试了所有可能的组合:在整个条件周围使用单引号和/或大括号,以及在 f:count(subject) 内部使用相同的组合,但没有找到使其工作的方法。

另外从 VHS 扩展中尝试了v:variable.get,但也没有成功:

{f:if(condition: {v:variable.get(name: 'settings.media.responsive{f:count(subject: records)}')}, then: 'true', else: 'false')}

上面的代码总是产生true

重要注意:settings.media.responsive[number] 包含设置数组,因此不能通过在condition 中用单引号括起来将其转换为字符串。

【问题讨论】:

    标签: typo3 fluid


    【解决方案1】:

    如果您使用的是 Fluid 引擎库:

    {records -> f:variable(name: 'count')}
    {f:if(condition: '{f:count(subject: \'{settings.media.responsive{count}}\')}', then: 'true', else: 'false')}
    

    或者如果你想要 VHS:

    {f:if(condition: '{v:variable.get(name: \'settings.media.responsive{f:count(subject: records)}\') -> f:count()}', then: 'true', else: 'false')}
    

    【讨论】:

    • 问题是,我不能将settings.media.responsive[number] 转换为 sring,因为它包含一组设置。单引号中的包装条件导致#1476107295: PHP Warning: htmlspecialchars() expects parameter 1 to be string, array given in /path/vendor/typo3fluid/fluid/src/Core/Parser/SyntaxTree/EscapingNode.php line 44
    • 更新示例以反映您的动态命名设置本身就是一个数组的新信息。 Condition 现在对位于动态变量引用中的数组进行计数,如果计数 > 0,则执行 true 情况。仅供参考,该示例是 null 安全的,因此如果动态引用返回 null,则不会发生坏事(else 情况触发器)。
    • 谢谢,现在 vhs 部分可以工作了,但是纯流体方式总是给我带来true。但是,问题已解决,因此接受答案。
    猜你喜欢
    • 1970-01-01
    • 2017-07-14
    • 2014-12-06
    • 1970-01-01
    • 2013-09-12
    • 2021-09-01
    • 2018-04-20
    • 2017-11-05
    • 2014-02-24
    相关资源
    最近更新 更多