为什么内联/ IRRE记录获取sys_language_uid = 0?

时间:2019-03-21 13:34:37

标签: internationalization typo3 typo3-9.x

在后端的tt_content(无翻译/ sys_language_uid = 2)中创建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_slidessys_file_referencesys_language_uid = 2)。似乎在更新之前创建的记录确实将sys_language_uid设置为2,但是我不确定8到9之间发生了什么变化:这是核心变化吗?还是我的网站/语言配置? 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(我认为1hideNonTranslated不会改变任何行为)
  • 站点(和多站点)。该特定站点具有两种语言:
    • 语言1,德语(languageId: '0')已禁用。
    • 语言2,英语(languageId: '2')已启用; fallbackType: strict
  • 包含语言字段和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'
  ),
],
  • tx_foo_slider_slides中的列tt_content
[
  '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,
   ],
 ],

1 个答案:

答案 0 :(得分:2)

在这种情况下,问题是tx_foo_domain_model_slide.sys_language_uid被定义为:

'sys_language_uid' => [
  'config' => [
    'type' => 'passthrough',
    'default' => '',
  ],
],

根据TCA docs

  
      
  • FormEngine默认情况下不呈现任何传递类型。但可以将其与自定义renderType组合以使其呈现某些内容。不过,用户类型更适合此类用例。
  •   
  • 类型传递字段的值通常也不会在后端的其他位置呈现。
  •   

这导致未设置sys_language_uid(并保持为0)。因此,sys_language_uid必须定义为'type =>'select'`或类似名称。要隐藏它,可以将其放入hidden palette中,如here所述。