Почему встроенные / IRRE-записи получают sys_language_uid = 0?

При создании записи 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_slides, sys_file_reference) будут созданы с помощью sys_language_uid = 2. Кажется, что записи, созданные до обновления, имеют sys_language_uid значение 2, но я не уверен, что изменилось между 8 и 9: это изменение ядра? Или мой сайт / языковая конфигурация? sys_language_uid имел значение по умолчанию 0 в TCA, но удаление этого и создание дополнительных записей не показали другого поведения.

При попытке загрузить записи через репозиторий ExtBase, где мне, по-видимому, приходится использовать setRespectSysLanguage(false):

  • Я не получаю результатов с setLanguageOverlayMode(false)
  • I do get results with setLanguageOverlayMode(true), but the image field is NULL.
    • ... but if I also manually change the tx_foo_domain_model_slide.sys_language_uid to 2 it looks fine in BE and FE/ExtBase (image is a working FileReference)

Что могло пойти не так? Что может потребоваться изменить? Я думаю, что создание записей на языках, отличных от языков по умолчанию, является поддерживаемым случаем? Мне кажется, что основная причина заключается в том, что записи создаются с неправильным языковым набором.

Моя конфигурация:

  • TYPO3 9.5.5 (обновлено с 8)
  • config.tx_extbase.features.consistentTranslationOverlayHandling = 1 (но проверено 0 тоже)
  • config.sys_language_overlay = 0 (я не думаю, что 1 или hideNonTranslated изменили какое-либо поведение)
  • Sites (and multi-site). This specific site comes with two languages:
    • Language 1, German (languageId: '0') is disabled.
    • Язык 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,
   ],
 ],

person Thomas Luzat    schedule 21.03.2019    source источник


Ответы (1)


Проблема в этом случае в том, что tx_foo_domain_model_slide.sys_language_uid определяется как:

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

Согласно документам TCA:

  • FormEngine по умолчанию ничего не отображает для сквозных типов. Но его можно комбинировать с настраиваемым типом renderType, чтобы он что-то рендерил. Однако тип пользователя лучше подходит для таких случаев использования.
  • Значения поля сквозной передачи обычно также не отображаются в других местах серверной части.

Это приводит к тому, что sys_language_uid не устанавливается (и остается на 0). Итак, sys_language_uid должен быть определен как 'type => 'select' 'или аналогичный. Чтобы скрыть его, можно поместить его в скрытую палитру , как описано person Thomas Luzat    schedule 21.03.2019