diff --git a/packages/evo_megamenu_json/Classes/Service/MenuBuilder.php b/packages/evo_megamenu_json/Classes/Service/MenuBuilder.php index d234866..d7c4d57 100644 --- a/packages/evo_megamenu_json/Classes/Service/MenuBuilder.php +++ b/packages/evo_megamenu_json/Classes/Service/MenuBuilder.php @@ -14,6 +14,7 @@ use TYPO3\CMS\Core\Domain\Repository\PageRepository; use TYPO3\CMS\Core\Resource\FileRepository; use TYPO3\CMS\Core\Service\FlexFormService; use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Service\ImageService; use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; /** @@ -349,13 +350,33 @@ final class MenuBuilder return null; } try { - return [ - 'url' => $reference->getPublicUrl(), - 'alternative' => (string)$reference->getProperty('alternative'), - 'title' => (string)$reference->getProperty('title'), - 'width' => (int)$reference->getProperty('width'), - 'height' => (int)$reference->getProperty('height'), - ]; + // Menu tiles are small: ship a processed 640px webp instead of the + // original upload - multi-MB teaser images went over the wire + // (found 2026-10-23). 640 matches the search-tile convention; the + // original URL stays the fallback when processing fails, so the + // menu never loses an image over a converter hiccup. + try { + $imageService = GeneralUtility::makeInstance(ImageService::class); + $processed = $imageService->applyProcessingInstructions( + $reference, + ['maxWidth' => 640, 'fileExtension' => 'webp'] + ); + return [ + 'url' => $imageService->getImageUri($processed), + 'alternative' => (string)$reference->getProperty('alternative'), + 'title' => (string)$reference->getProperty('title'), + 'width' => (int)$processed->getProperty('width'), + 'height' => (int)$processed->getProperty('height'), + ]; + } catch (\Throwable) { + return [ + 'url' => $reference->getPublicUrl(), + 'alternative' => (string)$reference->getProperty('alternative'), + 'title' => (string)$reference->getProperty('title'), + 'width' => (int)$reference->getProperty('width'), + 'height' => (int)$reference->getProperty('height'), + ]; + } } catch (\Throwable) { return null; }