如何使用 TYPO3 10 以 FluidTYPO3 助焊剂形式制作多个带有图像的部分?

How to have multiple sections with images in a FluidTYPO3 flux form with TYPO3 10?

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

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

到目前为止的解决方案(TYPO3 <= 9):
时间线元素是部分。图片使用 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 中的问题:
flux:field.file 所依赖的技术(select 文件的 TCA group 字段)在 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 中添加多个图像字段? 编辑:更具体地说,如何将图像字段添加为可以包含多个 child 记录(导致多个图像字段)的 Flexform 部分的一部分?

注意:我知道我可以通过使用具有 inputLink renderType(如 this)的 input 字段来返回“file-like”字段,但是作为据我所知,它不允许 link 多张图片。

您提到的错误报告已经包含解决方案,因为那里描述的实际问题是 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)以支持数据库中的“真实”字段 table。

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

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

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

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

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

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

如果您当前在 typo3 10 处使用 flux:field.file 元素和 useFalRelation=1,您可以将其替换为 flux:field 元素。它未被弃用并与 flux:form.object 元素

结合使用

以下示例:

<flux:field.file
    allowed="jpg,png,svg,gif"
    exclude="false"
    label="MyLabel"
    name="myname"
    showThumbnails="1"
    useFalRelation="1"
    maxItems="1"
    minItems="1"
/>

可以替换为:

<flux:field type="input" name="myname" label="MyLabel"
    config="{
        type: 'group',
        size: 1,
        internal_type: 'db',
        use_fal_relation: 1,
        allowed: 'sys_file',
        maxitems: 1,
        minitems: 0,
        show_thumbs: 1,
        appearance: {
            elementBrowserAllowed: 'jpg,png,svg,gif',
            elementBrowserType: 'file'
        }
    }
"/>