如何检查a(字符串)是否等于a(数组内的字符串)?我可以用 If 语句检查它吗?

问题描述 投票:0回答:5

我想检查字符串是否与数组中的字符串之一匹配。

可以使用 TYPO3 液或 vhs 吗?

<f:if condition="{string} ?? {anArrayOfStrings}">
  <f:then>
    <p>Message</p>
  </f:then>
  <f:else>

  </f:else>
</f:if>

提前非常感谢:)

arrays if-statement typo3 fluid
5个回答
2
投票

我使用了 VHS“v:condition.string.contains”。它有效:)

<v:condition.string.contains needle="{string}" haystack="{anArrayOfStrings}">
  <f:then>
    Message
  </f:then>
  <f:else>
  </f:else>
</v:condition.string.contains>

2
投票

Fluid 默认情况下没有 inArray ViewHelper,但 EXT:vhs 有 (

v:condition.iterator.contains
)。请参阅https://viewhelpers.fluidtypo3.org/fluidtypo3/vhs/5.0.1/Condition/Iterator/Contains.html

如果您想在没有 VHS 的情况下完成此操作,您可以创建自定义 ViewHelper。有关更多信息,您可以在这里找到https://www.andrerinas.de/tutorials/typo3-in-array-viewhelper.html(德语,但即使您不懂德语,代码也应该足够清晰)


1
投票

您不需要 VHS 或自定义 ViewHelpers。

只需使用

f:for
循环遍历数组,如果找到它就设置一个变量:

<f:variable name="stringFound" value="0" />
<f:for each="{anArrayOfStrings}" as="arrayString">
    <f:if condition="{string} == {arrayString}">
        <f:variable name="stringFound" value="1" />
    </f:if>
</f:for>
    
<f:if condition="{stringFound} == 1">
    <f:then>
        <p>String found in array</p>
    </f:then>
    <f:else>
        <p>String not in array</p>
    </f:else>
</f:if>

0
投票

TYPO3没有这样的ViewHelper。请使用EXT:vhs的ViewHelper

https://fluidtypo3.org/viewhelpers/vhs/1.8.2/If/Iterator/ContainsViewHelper.html

{namespace v=FluidTYPO3\Vhs\ViewHelpers}
<v:if needle="{string}" haystack="{anArrayOfStrings}">
  <f:then>
    <p>Message</p>
  </f:then>
  <f:else>

  </f:else>
</v:if>

不知道这是否适用于 f:than。也许尝试 v:than 或此 ViewHelper 的than-属性。


0
投票

这是一个对我来说适用于 TYPO3 9.5.14 的具体示例。基于所选的截面框架(“custom-45”或“custom-50”),流体渲染具有“my-custom-frame”类的特殊 div 元素,否则它使用默认渲染:

<v:condition.string.contains needle="{data.frame_class}" haystack="{'custom-45','custom-50'}">
    <f:then>
        <div class="my-custom-frame">
    </f:then>
    <f:else>
        <div id="c{data.uid}" class="frame frame-{data.frame_class} frame-type-{data.CType} frame-layout-{data.layout}{f:if(condition: data.space_before_class, then: ' frame-space-before-{data.space_before_class}')}{f:if(condition: data.space_after_class, then: ' frame-space-after-{data.space_after_class}')}">
    </f:else>
</v:condition.string.contains>

针是为内容元素选择的部分框架。在大海捞针中,您可以找到导致真实条件的值。我用它来缩短 or 语法:

<f:if condition="{data.frame_class} == 'custom-45' || {data.frame_class} == 'custom-50'">
    <f:then>
        <div class="my-custom-frame">
    </f:then>
    <f:else>
        <div id="c{data.uid}" class="frame frame-{data.frame_class} frame-type-{data.CType} frame-layout-{data.layout}{f:if(condition: data.space_before_class, then: ' frame-space-before-{data.space_before_class}')}{f:if(condition: data.space_after_class, then: ' frame-space-after-{data.space_after_class}')}">
    </f:else>
</f:if>

流体模板中的命名空间声明是不必要的。使用的 VHS:Fluid ViewHelpers-Extension 是 6.0.0。

© www.soinside.com 2019 - 2024. All rights reserved.