流动模板:仅在存在图像时渲染图像

时间:2019-10-21 11:19:39

标签: typo3 fluid typo3-9.x fluid-styled-content

在尝试渲染图像之前,如何使用f:if来查看服务器上是否存在图像?

我尝试了以下操作但未成功:

<f:if condition="fileadmin/bilder/Header/{data.title}.jpg">
    <f:then>
        <f:variable name="imageUri" value="fileadmin/bilder/Header/{data.title}.jpg" />
    </f:then>
    <f:else>
        <f:variable name="imageUri" value="fileadmin/bilder/Header/default.jpg" />
    </f:else>
</f:if>

{data.title}可以正常工作。问题是我的状况不对。它永远不会去其他。可能我的情况是解释为字符串而不是来源。

这里的描述无济于事,因为我的图像在服务器上。 Render image in fluid template if it exists?

1 个答案:

答案 0 :(得分:0)

首先,为什么在模板中的fileadmin中会有一个硬编码的文件路径?这是非常罕见的,大多数情况下,您是通过TYPO3建立某种关系的(例如通过pages表中的media字段之类的东西)。

如果仍然需要此文件,则必须编写FileExistsViewHelper来检查文件是否存在,然后再使用它。以下是有关如何编写自定义视图帮助程序的文档:https://docs.typo3.org/m/typo3/book-extbasefluid/master/en-us/8-Fluid/8-developing-a-custom-viewhelper.html 您需要使用registerArgument将文件名注册为参数,然后在TYPO3安装之前添加路径(使其成为绝对路径),并使用file_exists检查该文件。 从\TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper扩展并实现verdict方法。

您上面的模板仅创建了一个字符串(正如您已经猜到的那样)。