如何解决 VHS ViewHelper v:replace 的一个奇怪问题?
How do I solve a strange problem with VHS ViewHelper v:replace?
我有一个数组 ('db-titles'),其项是以 'TextA*TextB' 形式组成的字符串。
我想从这些数组项创建以下 HTML 结构:<span>TextA</span><span>TextB</span>
为此,我使用了以下流畅的脚本:
{namespace v=FluidTYPO3\Vhs\ViewHelpers}
<f:if condition="{db-titles -> f:count()} > 1">
<f:then>
<!-- This works as expected, the html code will be rendered correctly -->
<v:iterator.for from="0" to="{db-titles -> f:count()}" iteration="i">
<span><v:format.replace content="{db-titles.{i.index}}" substring="*" replacement="</span><span>"/></span>
</v:iterator.for>
</f:then>
<f:else>
<!-- This strangely does not work, although I - instead of running through all values of the array - just want to output the first value of it.... -->
<span><v:format.replace content="{v:iterator.first(haystack: db-titles)}" substring="*" replacement="</span><span>"/></span>
</f:else>
</f:if>
正如我在源代码中评论的那样,在“”下一切正常,但在“”下,我只想使用数组的第一个值,被替换的部分('*' 到 </span><span>
)奇怪地呈现为文本而不是 HTML:<span>TextA</span><span>TextB</span>
怎么会这样?
让我提一下,我使用“PHPStorm”应用程序进行编程 - 程序是否可能呈现错误的源代码?
在此先感谢您的帮助!
在没有找到奇怪行为的解释的情况下,我找到了一个解决方案:用 <f:format.raw> ... </>
包装 <v:format.replace ... />
可以防止标签转换为字符串。
<f:if condition="{db-titles -> f:count()} > 1">
<f:then>
<v:iterator.for from="0" to="{db-titles -> f:count()}" iteration="i">
<span><f:format.raw><v:format.replace content="{db-titles.{i.index}}" substring="*" replacement="</span><span>"/></f:format.raw></span>
</v:iterator.for>
</f:then>
<f:else>
<span><f:format.raw><v:format.replace content="{v:iterator.first(haystack: db-titles)}" substring="*" replacement="</span><span>"/></(f:format.raw></span>
</f:else>
</f:if>
我有一个数组 ('db-titles'),其项是以 'TextA*TextB' 形式组成的字符串。
我想从这些数组项创建以下 HTML 结构:<span>TextA</span><span>TextB</span>
为此,我使用了以下流畅的脚本:
{namespace v=FluidTYPO3\Vhs\ViewHelpers}
<f:if condition="{db-titles -> f:count()} > 1">
<f:then>
<!-- This works as expected, the html code will be rendered correctly -->
<v:iterator.for from="0" to="{db-titles -> f:count()}" iteration="i">
<span><v:format.replace content="{db-titles.{i.index}}" substring="*" replacement="</span><span>"/></span>
</v:iterator.for>
</f:then>
<f:else>
<!-- This strangely does not work, although I - instead of running through all values of the array - just want to output the first value of it.... -->
<span><v:format.replace content="{v:iterator.first(haystack: db-titles)}" substring="*" replacement="</span><span>"/></span>
</f:else>
</f:if>
正如我在源代码中评论的那样,在“</span><span>
)奇怪地呈现为文本而不是 HTML:<span>TextA</span><span>TextB</span>
怎么会这样?
让我提一下,我使用“PHPStorm”应用程序进行编程 - 程序是否可能呈现错误的源代码?
在此先感谢您的帮助!
在没有找到奇怪行为的解释的情况下,我找到了一个解决方案:用 <f:format.raw> ... </>
包装 <v:format.replace ... />
可以防止标签转换为字符串。
<f:if condition="{db-titles -> f:count()} > 1">
<f:then>
<v:iterator.for from="0" to="{db-titles -> f:count()}" iteration="i">
<span><f:format.raw><v:format.replace content="{db-titles.{i.index}}" substring="*" replacement="</span><span>"/></f:format.raw></span>
</v:iterator.for>
</f:then>
<f:else>
<span><f:format.raw><v:format.replace content="{v:iterator.first(haystack: db-titles)}" substring="*" replacement="</span><span>"/></(f:format.raw></span>
</f:else>
</f:if>