如何使用 TYPO3 10 以 FluidTYPO3 通量形式拥有多个带有图像的部分?

问题描述

我多年来一直使用 FluidTYPO3(flux 和 vhs)来运行 TYPO3 网页。使用 TYPO3 10,我面临一个主要问题。我会很快写下我的用例,到目前为止我是如何解决它的,然后是 10 LTS 的问题是什么。

用例:
我想要一个使用 FluidTYPO3/flux 的时间线的内容元素模板。时间线上的每个“点”都应该有一个标题、一些文本和一些可选的图像。总而言之,非常基本(或者我是这么认为的)。

目前的解决方案 (TYPO3
时间线元素是部分。图片正在使用 flux:field.file

表单的简化示例:

    <flux:form id="timeline" label="timeline">
        <flux:form.section name="timeline" label="Timeline">
            <flux:form.object name="element" label="Element">
                <flux:field.input name="title" label="Heading" />
                <flux:field.text name="label" label="Text" enableRichText="TRUE" />
                <flux:field.file name="images" label="Pictures" allowed="jpg,png,svg" multiple="TRUE" maxItems="50" size="5" showThumbnails="TRUE"
                />
            </flux:form.object>
        </flux:form.section>
    </flux:form>

这样,可以在时间轴上创建多个元素,并且每个元素都可以拥有自己的一组图像。

TYPO3 10 中的问题:
group 所依赖的技术(用于选择文件的 TCA flux:field.file 字段)在 TYPO3 9 中已被弃用,并在 TYPO3 10 中被移除,请参阅 this notice。这就是 flux:field.file 也被标记为已弃用并且将在 TYPO3 10 中删除的原因之一。

TYPO3 弃用通知说改用 FAL 关系。当然,flux 也可以用 flux:field.inline.fal 做到这一点。但是,每个 FlexForm 只能有一个 FAL 字段。这排除了它在部分中的使用,因为所有部分都将共享相同的图像。此限制已为人所知一段时间 - 请参阅 this bug report for example - 但从未修复。这也是我最初选择不使用 FAL 字段的原因。使用裸文件字段是当时推荐的解决方法。

问题:

那么 - 每个人都是怎么做的?如何在 TYPO3 10 中向 flexform 添加多个图像字段? 编辑:更具体地说,如何将图像字段添加为可以包含多个子记录(导致多个图像字段)的 Flexform 部分的一部分?

注意:我知道我可以通过将 input 字段与 inputLink 渲染类型(如 this)一起使用来获取“类似文件”的字段,但就我而言告诉它不允许链接多个图像。

解决方法

我发现了另一种可能适用于某些用例的解决方法:

如果 flux:field.file 参数设置为 true,仍然可以使用 useFalRelation 字段,即使在 TYPO3 v10 LTS 和可重复的 FlexForm 部分中也是如此。然后,这会将 sys_file 记录 ID 以逗号分隔到字段中,而不是原始文件名。它们可以用作 src 参数,例如 f:image 以及文件名,因此 CE 模板本身不必修改。不过,所有将 useFalRelation 设置为 false 的现有 CE 都需要迁移,以便将文件名替换为 sys_file UID。

这比 inputLink 解决方法好一点,因为它允许多个图像。

,

您提到的错误报告已经包含解决方案,因为那里描述的实际问题是 flexform 中的 FAL 字段使用相同的名称。

所以代替

image

根据错误报告应该有

settings.foreground.image

这当然不起作用,因为点是路径的一部分而不是名称的一部分。 但实际上用下划线替换点并在同一个 flexform 选项卡中使用一些后缀应该可以解决问题:

settings.foreground.settings_foreground_image
settings.foreground.settings_foreground_image2

这样可以确保

  1. 您的 flexform 中的字段名称是唯一的
  2. sys_file_reference 条目中的实际字段名称已包含完整路径信息
  3. 您可以使用该信息来获取图像,即在 DataProcessor 中,并且仍然知道它们实际属于的 FlexForm 字段

Sitll 我建议完全远离 FlexForms(因此也是 Flux),转而使用数据库表中的“真实”字段。

,

似乎使用 TYPO3 核心板载方法的唯一解决方法是使用具有单列的 Flux-Container,其中包含简单的默认“带图像的文本”或“带媒体的文本”元素,然后忽略这些元素的其他选项并只呈现必要的字段。

在 Gridelements 中,这被称为“功能容器”,因为容器决定了这些元素的行为和外观,而元素本身根本不必是自定义元素。

此外,这使得访问这些元素的内容 - 即在进行搜索查询时 - 更加容易。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...