如何使用 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
这样你可以确保
- 您的 flexform 中的字段名称是唯一的
- sys_file_reference条目中的实际字段名称已包含完整路径信息
- 您可以使用该信息来获取图像,即在 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'
}
}
"/>
多年来,我一直在使用 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
这样你可以确保
- 您的 flexform 中的字段名称是唯一的
- sys_file_reference条目中的实际字段名称已包含完整路径信息
- 您可以使用该信息来获取图像,即在 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'
}
}
"/>