Bug #85784
Updated by Georg Ringer over 5 years ago
I added my own column with fieldInformation to TCA using this code <pre> //create columns $column = array ( 'keywords' => [ 'exclude' => '0', 'label' => 'myLabel', 'config' => [ 'type' => 'text', 'fieldInformation' => [ 'html' => 'Zeile 1', ], ], ], ); //add column to TCA \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns( 'sys_category', $column ); //add Field to Palette \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToAllPalettesOfField( 'sys_category', 'description', 'keywords'); </pre> DependencyOrderingService threw an error. <pre> #1476107295: PHP Warning: Illegal string offset 'before' in D:\Projekte\CMS\Typo3Source\typo3_src-8.7.18\typo3\sysext\core\Classes\Service\DependencyOrderingService.php line 271 (More information) TYPO3\CMS\Core\Error\Exception thrown in file D:\Projekte\CMS\Typo3Source\typo3_src-8.7.18\typo3\sysext\core\Classes\Error\ErrorHandler.php in line 107. </pre> *Solution:* Namespace: TYPO3\CMS\Core\Service Class: DependencyOrderingService File: typo3/sysext/core/Classes/Services/DependencyOrderingService.php Check if $dependencies[$id][$beforeKey] and $dependencies[$id][$afterKey] are set before iterating. <pre> 98: foreach ($identifiers as $id) { 99: //Check if $dependencies[$id][$beforeKey] is set before iterating. 100: if (isset($dependencies[$id][$beforeKey])) { 101: foreach ($dependencies[$id][$beforeKey] as $beforeId) { 102: $dependencyGraph[$beforeId][$id] = true; 103: } 104: } 105: //Check if $dependencies[$id][$afterKey] is set before iterating. 106: if (isset($dependencies[$id][$afterKey])) { 107: foreach ($dependencies[$id][$afterKey] as $afterId) { 108: $dependencyGraph[$id][$afterId] = true; 109: } 110: } 111:} </pre> Check if $dependency is array. in case of fieldInformation it only is a string <pre> 271: protected function prepareDependencies(array $dependencies, $beforeKey = 'before', $afterKey = 'after') 272: { 273: $preparedDependencies = []; 274: foreach ($dependencies as $id => $dependency) { 275 //check if $dependency is array 276: if (is_array($dependency)) { 277: foreach ([ $beforeKey, $afterKey ] as $relation) { 278: if (!isset($dependency[$relation]) || !is_array($dependency[$relation])) { 279: $dependency[$relation] = []; 280: } 281: // add all missing, but referenced identifiers to the $dependency list 282: foreach ($dependency[$relation] as $dependingId) { 283: if (!isset($dependencies[$dependingId]) && !isset($preparedDependencies[$dependingId])) { 284: $preparedDependencies[$dependingId] = [ 285: $beforeKey => [], 286: $afterKey => [] 287: ]; 288: } 289: } 290: } 291: } 292: $preparedDependencies[$id] = $dependency; 293: } 294: return $preparedDependencies; 295: } </pre> Namespace: TYPO3\CMS\Backend\Form\NodeExpansion Class: FieldInformation File: typo3/sysext/backend/Classes/Form/NodeExpansion/FieldInformation.php assign orderedFieldInformation to result <pre> 50: //assign to result 51: $result = $orderedFieldInformation; </pre> blue sky, programmierschlampe