我想检查字符串是否与数组中的字符串之一匹配。
可以使用 TYPO3 液或 vhs 吗?
<f:if condition="{string} ?? {anArrayOfStrings}">
<f:then>
<p>Message</p>
</f:then>
<f:else>
</f:else>
</f:if>
提前非常感谢:)
我使用了 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>
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(德语,但即使您不懂德语,代码也应该足够清晰)
您不需要 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>
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-属性。
这是一个对我来说适用于 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。