0

多年来,我一直在使用 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 中的问题:依赖的技术(选择文件
的 TCA字段)在 TYPO3 9 中已弃用并在 TYPO3 10 中删除,请参阅此通知。这也是为什么也被标记为弃用并将在 TYPO3 10 中删除的原因之一。groupflux:field.fileflux:field.file

TYPO3 弃用通知说要使用 FAL 关系。当然,flux 也可以用flux:field.inline.fal. 但是,每个 FlexForm 只能有一个 FAL 字段。这排除了它在部分中的使用,因为所有部分都将共享相同的图像。这个限制已经有一段时间了——例如参见这个错误报告——但从未得到修复。这也是我最初选择不使用 FAL 字段的原因。使用裸文件字段是当时推荐的解决方法。

问题:

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

注意:我知道我可以通过使用input带有inputLinkrenderType 的字段(如this)来获取“类似文件”的字段,但据我所知,它不允许链接多个图像。

4

4 回答 4

1

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

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

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

于 2021-04-04T10:06:05.873 回答
0

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

于 2021-03-21T16:21:49.047 回答
0

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

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

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

于 2021-03-21T18:55:38.270 回答
0

如果您当前使用flux:field.filetypo3 10 处的元素,则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'
        }
    }
"/>
于 2021-12-02T13:09:09.410 回答