为什么 inline/IRRE 条记录得到 sys_language_uid=0?
Why do inline/IRRE records get sys_language_uid=0?
当在 sys_language_uid = 2
中创建 tt_content
记录(无翻译/l10n_parent = 0
)并在 type => 'inline'
列 tx_foo_slider_slides
中插入字段时(定义下面),tx_foo_domain_model_slide
中新创建的记录是用 sys_language_uid = 0
创建的。将图像添加到幻灯片的图像字段会创建 sys_file_reference
和 sys_language_uid = 2
。 这是正确的吗?如果不是,我该如何更改? 我希望所有记录(tt_content
、tx_foo_slider_slides
、sys_file_reference
)都是用 sys_language_uid = 2
创建的。似乎更新前创建的记录确实将 sys_language_uid
设置为 2,但我不确定 8 和 9 之间发生了什么变化:这是核心变化吗?或者我的 site/language 配置? sys_language_uid
在 TCA 中有默认值 0,但删除它并创建其他记录并没有显示任何不同的行为。
当尝试通过 ExtBase 存储库加载记录时,我似乎不得不使用 setRespectSysLanguage(false)
:
setLanguageOverlayMode(false)
没有结果
- 我用
setLanguageOverlayMode(true)
确实得到了结果,但图像字段是 NULL
。
- ...但如果我也手动将
tx_foo_domain_model_slide.sys_language_uid
更改为 2,它在 BE 中看起来很好,FE/ExtBase(image
是一个有效的 FileReference
)
可能出了什么问题?可能需要改变什么?我认为以非默认语言创建记录是受支持的案例?对我来说,根本原因似乎是记录是使用错误的语言集创建的。
我的配置:
- TYPO3 9.5.5(从 8 更新)
config.tx_extbase.features.consistentTranslationOverlayHandling = 1
(但也测试了 0
)
config.sys_language_overlay = 0
(我不认为 1
或 hideNonTranslated
改变了任何行为)
- 站点(和多站点)。这个特定的网站有两种语言:
- 语言 1,德语 (
languageId: '0'
) 已禁用。
- 语言 2,英语 (
languageId: '2'
) 已启用; fallbackType: strict
- 自定义 table
tx_foo_domain_model_slide
包括语言字段和 image
列:
'image' => [
'label' => $ll.'tx_foo_domain_model_slide.image',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig(
'image',
[
'appearance' => [
'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference',
],
'overrideChildTca' => [
// types ...
],
'minitems' => 1,
'maxitems' => 1,
],
$GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] .',m4v,mp4v,mp4'
),
],
tt_content
中的第 tx_foo_slider_slides
列:
[
'label' => $ll . 'slider.slides',
'config' => [
'type' => 'inline',
'appearance' => [
'collapseAll' => true,
'expandSingle' => true,
],
'foreign_field' => 'slider',
'foreign_sortby' => 'sorting',
'foreign_table' => 'tx_foo_domain_model_slide',
'maxitems' => 100,
'minitems' => 0,
],
],
这种情况下的问题是,tx_foo_domain_model_slide.sys_language_uid
定义为:
'sys_language_uid' => [
'config' => [
'type' => 'passthrough',
'default' => '',
],
],
根据 TCA docs:
- FormEngine does not render anything for passthrough types by default. But it can be combined with a custom renderType to make it render something. A user type is better suited for such use cases, though.
- Type passthrough field values are usually also not rendered at other places in the backend.
这导致 sys_language_uid
未被设置(并保持为 0)。因此,sys_language_uid
必须定义为 'type
=> 'select'` 或类似的。要隐藏它,可以将它放在 hidden palette, as described here.
中
当在 sys_language_uid = 2
中创建 tt_content
记录(无翻译/l10n_parent = 0
)并在 type => 'inline'
列 tx_foo_slider_slides
中插入字段时(定义下面),tx_foo_domain_model_slide
中新创建的记录是用 sys_language_uid = 0
创建的。将图像添加到幻灯片的图像字段会创建 sys_file_reference
和 sys_language_uid = 2
。 这是正确的吗?如果不是,我该如何更改? 我希望所有记录(tt_content
、tx_foo_slider_slides
、sys_file_reference
)都是用 sys_language_uid = 2
创建的。似乎更新前创建的记录确实将 sys_language_uid
设置为 2,但我不确定 8 和 9 之间发生了什么变化:这是核心变化吗?或者我的 site/language 配置? sys_language_uid
在 TCA 中有默认值 0,但删除它并创建其他记录并没有显示任何不同的行为。
当尝试通过 ExtBase 存储库加载记录时,我似乎不得不使用 setRespectSysLanguage(false)
:
setLanguageOverlayMode(false)
没有结果
- 我用
setLanguageOverlayMode(true)
确实得到了结果,但图像字段是NULL
。- ...但如果我也手动将
tx_foo_domain_model_slide.sys_language_uid
更改为 2,它在 BE 中看起来很好,FE/ExtBase(image
是一个有效的FileReference
)
- ...但如果我也手动将
可能出了什么问题?可能需要改变什么?我认为以非默认语言创建记录是受支持的案例?对我来说,根本原因似乎是记录是使用错误的语言集创建的。
我的配置:
- TYPO3 9.5.5(从 8 更新)
config.tx_extbase.features.consistentTranslationOverlayHandling = 1
(但也测试了0
)config.sys_language_overlay = 0
(我不认为1
或hideNonTranslated
改变了任何行为)- 站点(和多站点)。这个特定的网站有两种语言:
- 语言 1,德语 (
languageId: '0'
) 已禁用。 - 语言 2,英语 (
languageId: '2'
) 已启用;fallbackType: strict
- 语言 1,德语 (
- 自定义 table
tx_foo_domain_model_slide
包括语言字段和image
列:
'image' => [
'label' => $ll.'tx_foo_domain_model_slide.image',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig(
'image',
[
'appearance' => [
'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference',
],
'overrideChildTca' => [
// types ...
],
'minitems' => 1,
'maxitems' => 1,
],
$GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] .',m4v,mp4v,mp4'
),
],
tt_content
中的第tx_foo_slider_slides
列:
[
'label' => $ll . 'slider.slides',
'config' => [
'type' => 'inline',
'appearance' => [
'collapseAll' => true,
'expandSingle' => true,
],
'foreign_field' => 'slider',
'foreign_sortby' => 'sorting',
'foreign_table' => 'tx_foo_domain_model_slide',
'maxitems' => 100,
'minitems' => 0,
],
],
这种情况下的问题是,tx_foo_domain_model_slide.sys_language_uid
定义为:
'sys_language_uid' => [
'config' => [
'type' => 'passthrough',
'default' => '',
],
],
根据 TCA docs:
- FormEngine does not render anything for passthrough types by default. But it can be combined with a custom renderType to make it render something. A user type is better suited for such use cases, though.
- Type passthrough field values are usually also not rendered at other places in the backend.
这导致 sys_language_uid
未被设置(并保持为 0)。因此,sys_language_uid
必须定义为 'type
=> 'select'` 或类似的。要隐藏它,可以将它放在 hidden palette, as described here.