Bug #81096
open
Images wrongly cropped in translated pages
Added by Ian Solo over 7 years ago.
Updated over 5 years ago.
Category:
File Abstraction Layer (FAL)
Description
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.
- Target version changed from 8 LTS to next-patchlevel
- Related to Bug #80724: Image width="0" and height="0" on translated metadata added
Hi,
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.
Gianluca
The initial problem is that translated records in sys_file_metadata
have a width
and height
of 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 width
and height
after calling getRecordOverlay()
.
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.
- Status changed from New to Under Review
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)
TSCONFIG:
TCEFORM.sys_file_metadata.height.disabled = 1
TCEFORM.sys_file_metadata.width.disabled = 1
TCA:
$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
- Status changed from Under Review to Accepted
- Related to Bug #87162: Width and Height in translated meta data records not updated, when original file is replaced added
- Target version changed from next-patchlevel to Candidate for patchlevel
Same problem here. Images with the wrong size (0 width/height) are not visible in frontend output of translated pages. Pretty hard to understand for editors what is going wrong, since the image is shown in backend but not in frontend context.
Thanks Helmut for pointing out a solution.
Also available in: Atom
PDF