Images wrongly cropped in translated pages
sys_file_metadata stores width/height of an image in the record with sys_language_uid=0 while in the translated records with sys_language_uid!=0 width/height are 0.
Then \TYPO3\CMS\Frontend\Page\PageRepository::getRecordOverlay() overlays the right dimensions in the $row with the 0 from $olrow even if TCA of sys_file_metadata has 'l10n_mode' => 'exclude' for the fields 'width' and 'height'.
The image then is often wrongly cropped in the translated pages.
#3 Updated by Gianluca Strafella over 1 year ago
if it could be useful, this is a dirty work-around to fix the problem on TYPO3 8.7.4 :
$GLOBALS['TCA']['sys_file_metadata']['columns']['width']['l10n_mode'] = 'prefixLangTitle'; $GLOBALS['TCA']['sys_file_metadata']['columns']['width']['config']['type'] = 'user'; $GLOBALS['TCA']['sys_file_metadata']['columns']['height']['l10n_mode'] = 'prefixLangTitle'; $GLOBALS['TCA']['sys_file_metadata']['columns']['height']['config']['type'] = 'user';
based on override of TCA.
#4 Updated by Christian Weiske over 1 year ago
The initial problem is that translated records in
sys_file_metadata have a
0, unlike their untranslated counterparts that have those properties filled correctly.
Coarse call stack:
- MetaDataRepository->findByFile() - MetaDataRepository->emitRecordPostRetrievalSignal() - FileMetadataOverlayAspect->languageAndWorkspaceOverlay() - TYPO3\CMS\Frontend\Page\PageRepository->getRecordOverlay()
PageRepository.php::getRecordOverlay() fetches the translated
sys_file_metadata record and overlays all properties of the original row without caring if they should be overlaid at all:
// Merge record content by traversing all fields
A solution is to adjust
FileMetadataOverlayAspect and reset
height after calling
Another solution would be to copy width and height of the original metadata record to the translated ones - but this might cause issue when updating/replacing the file, since the size data would need to be re-propagated then.
#8 Updated by Helmut Hummel 7 months ago
The reason for that is the following. Despite width and height being configured to be synced for translations (l10_mode = exclude), DataHandler does NOT sync these fields, if editors do not have permissions to edit/change them.
This DataHandler behaviour is unfortunate, because these fields are read only anyway.
We fixed this in our project by simply setting the tca value of 'exclude' to 'false'. This makes the readonly fields appear in the default language, but also syncs the width and height properly, when saving any meta data record (translation or default language does not matter)
#9 Updated by Helmut Hummel 7 months ago
TCEFORM.sys_file_metadata.height.disabled = 1 TCEFORM.sys_file_metadata.width.disabled = 1
$GLOBALS['TCA'][$table]['columns']['width']['exclude'] = false; $GLOBALS['TCA'][$table]['columns']['height']['exclude'] = false;
Setting both works as expected. Fields are not show, but DataHandler sync works