Lukaszinorbuterno Folgendes ist schon mal in deinem Code-Beispiel auffällig:
Sowohl im Changelog Feature: #98479 - New TCA type "file" als auch in der Dokumentation des neuen TCA Types file
wird im Beispiel des zu migrierenden Code an der Stelle des ersten Parameters ($fieldName
) der Methode ExtensionManagementUtility::getFileFieldTCAConfig
der Name des Feldes eingetragen, für den Datei-Referenzen ermöglicht werden sollen.
Dies weicht bei dir ab. In deinem Fall lautet die Bezeichnung des Feldes image_left
und die Bezeichnung des ersten Parameters imageLeft
.
Die Methode sah bis TYPO3 11 so aus:
/**
* Gets the TCA configuration for a field handling (FAL) files.
*
* @param string $fieldName Name of the field to be used
* @param array $customSettingOverride Custom field settings overriding the basics
* @param string $allowedFileExtensions Comma list of allowed file extensions (e.g. "jpg,gif,pdf")
* @param string $disallowedFileExtensions
*
* @return array
*/
public static function getFileFieldTCAConfig($fieldName, array $customSettingOverride = [], $allowedFileExtensions = '', $disallowedFileExtensions = '')
{
$fileFieldTCAConfig = [
'type' => 'inline',
'foreign_table' => 'sys_file_reference',
'foreign_field' => 'uid_foreign',
'foreign_sortby' => 'sorting_foreign',
'foreign_table_field' => 'tablenames',
'foreign_match_fields' => [
'fieldname' => $fieldName,
],
'foreign_label' => 'uid_local',
'foreign_selector' => 'uid_local',
'overrideChildTca' => [
'columns' => [
'uid_local' => [
'config' => [
'appearance' => [
'elementBrowserType' => 'file',
'elementBrowserAllowed' => $allowedFileExtensions,
],
],
],
],
],
'filter' => [
[
'userFunc' => FileExtensionFilter::class . '->filterInlineChildren',
'parameters' => [
'allowedFileExtensions' => $allowedFileExtensions,
'disallowedFileExtensions' => $disallowedFileExtensions,
],
],
],
'appearance' => [
'useSortable' => true,
'headerThumbnail' => [
'field' => 'uid_local',
'height' => '45m',
],
'enabledControls' => [
'info' => true,
'new' => false,
'dragdrop' => true,
'sort' => false,
'hide' => true,
'delete' => true,
],
],
];
ArrayUtility::mergeRecursiveWithOverrule($fileFieldTCAConfig, $customSettingOverride);
return $fileFieldTCAConfig;
}
Seit TYPO3 12 sieht sie nurnoch so aus:
/**
* Gets the TCA configuration for a field handling (FAL) files.
*
* @param string $fieldName Name of the field to be used
* @param array $customSettingOverride Custom field settings overriding the basics
* @param string $allowedFileExtensions Comma-separated list of allowed file extensions (e.g. "jpg,gif,pdf")
* @param string $disallowedFileExtensions Comma-separated list of disallowed file extensions (e.g. "doc,docx")
*
* @deprecated since TYPO3 v12.0. Use the TCA type "file" directly
*/
public static function getFileFieldTCAConfig(string $fieldName, array $customSettingOverride = [], string $allowedFileExtensions = '', string $disallowedFileExtensions = ''): array
{
trigger_error(
'ExtensionManagementUtility::getFileFieldTCAConfig() will be removed in TYPO3 v13.0. Use TCA type "file" directly instead.',
E_USER_DEPRECATED
);
$fileFieldTCAConfig = [
'type' => 'file',
'allowed' => $allowedFileExtensions,
'disallowed' => $disallowedFileExtensions,
];
ArrayUtility::mergeRecursiveWithOverrule($fileFieldTCAConfig, $customSettingOverride);
return $fileFieldTCAConfig;
}
Der Parameter hat neuerdings also keine Auswirkungen mehr, da er nirgendwo im finalen Code mehr vorkommt. Wie man hier außerdem sieht, wird innerhalb der veralteten Methode auf das neue Format umgestellt.
Die Abweichung besteht also darin, dass du ehemals einen anderen Bezeichner für
'foreign_match_fields' => [
'fieldname' => $fieldName,
],
verwendet hattest, der so nichtmehr in der Konfiguration abbildbar ist.
Die verfügbaren Eigenschaften des file
TCA Types berücksichtigen jedenfalls foreign_match_fields
nicht.
Ich würde nun so einschätzen, dass du zwingend eine Migration auf DB-Ebene benötigst, die eine Konfiguration wieder gerade zieht, die schon vorher ungünstig gewählt war.
Bei so vielen Datensätzen macht es natürlich gar keinen Sinn da redaktionell drüber zu gehen. Ich vermute mal, dass es am Ende mit einem einfachen MySQL-Befehl korrigiert werden kann.
Der Nächste Schritt wird nun sein zu prüfen wie genau der sys_file_reference
-Datensatz vor und nach der Migration beschaffen ist vor dem Hintergrund des nun nichtmehr verwendeten Feldnamens.