问题描述
我多年来一直使用 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
这样可以确保
- 您的 flexform 中的字段名称是唯一的
- sys_file_reference 条目中的实际字段名称已包含完整路径信息
- 您可以使用该信息来获取图像,即在 DataProcessor 中,并且仍然知道它们实际属于的 FlexForm 字段
Sitll 我建议完全远离 FlexForms(因此也是 Flux),转而使用数据库表中的“真实”字段。
,似乎使用 TYPO3 核心板载方法的唯一解决方法是使用具有单列的 Flux-Container,其中包含简单的默认“带图像的文本”或“带媒体的文本”元素,然后忽略这些元素的其他选项并只呈现必要的字段。
在 Gridelements 中,这被称为“功能容器”,因为容器决定了这些元素的行为和外观,而元素本身根本不必是自定义元素。
此外,这使得访问这些元素的内容 - 即在进行搜索查询时 - 更加容易。