如果条件未能检测到图像,则流体?

Fluid if condition fails to detect image?

我正在遍历类别列表并尝试渲染图像(如果存在)。

我的问题是 IF 条件为假。如果我删除条件,它会很好地呈现图像,但如果没有图像,它会破坏网站。

<f:for each="{categories}" as="cat">
    <f:if condition="{cat.image}"><f:image image="{cat.image}" /></f:if>
    <span>{cat.title}</span>
</f:for>

编辑 - 解决方法:

由于此模板是第三方扩展的覆盖,我无法解决核心问题。但我想出了一个解决方法:

我可以用<f:cObject typoscriptObjectPath="lib.getCatImg" data="{img: cat.image }" />

然后我在打字稿中创建了一个基本的 FLUIDTEMPLATE

lib.getCatImg = FLUIDTEMPLATE
lib.getCatImg {
    templateName = CatImage
    templateRootPaths.10 = EXT:my_site/Resources/Private/Templates/
}

最后,在新模板中我可以使用 <f:if condition="{data.img}"> 并且它按预期工作。如果有更简单的方法,请告诉我。

总的来说,代码看起来不错。

没有关于类别模型和图像的更多信息属性,以下只是一个预感。
TYPO3 v9(和TYPO3 v10)使用Fluid 2.6,有problems with the variables if the property uses a LazyLoadingProxy。 这个问题应该从 TYPO3 v11 使用 Fluid 2.7 解决。

如果我的假设是正确的,有以下解决方案:

  1. 删除图像模型中的 LazyLoadingProxy 属性。
  2. 也许不在 Fluid 中检查 {cat.image} 本身但生成图像 URL 会有所帮助 - 所以在条件中使用 {f:uri:image(image:cat.image)}
  3. 而不是 mid-term 但非常推荐:更新到 TYPO3 v11.
    TYPO3 v9 LTS reached its end of free support on 30 September 2021