在尝试渲染图像之前,如何使用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?
答案 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
方法。
您上面的模板仅创建了一个字符串(正如您已经猜到的那样)。