【问题标题】:fluid template: render image only if it exists流体模板:仅在存在时渲染图像
【发布时间】:2019-10-21 11:19:39
【问题描述】:

如何在尝试渲染之前使用 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?

【问题讨论】:

  • 您检查的目的是什么?我猜你在页面上寻找标题图像?为什么不把图片放到页面属性中,让 TYPO3 用 TypoScript 轻松获取呢?
  • 我的第一个想法是将图像放入页面属性中,但我有两张可能的图片,一张用于标题,一张用于菜单。它可能只存在一个,我无法区分它是哪张图片。

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


【解决方案1】:

首先,为什么在模板中的 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 方法。

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 2014-03-10
相关资源
最近更新 更多