From 021e99b238d8458bb0593af2e2d571d14e93a31e Mon Sep 17 00:00:00 2001 From: Bernhard Rusch Date: Tue, 17 Feb 2026 17:04:15 +0100 Subject: [PATCH 1/3] Thumbnails: Use the same logic for list view as for the tile view --- src/Service/GridData/Asset.php | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/Service/GridData/Asset.php b/src/Service/GridData/Asset.php index d912c01a5..24cf3bd98 100644 --- a/src/Service/GridData/Asset.php +++ b/src/Service/GridData/Asset.php @@ -105,9 +105,26 @@ public static function getPreviewThumbnail(Model\Asset $asset, array $params = [ } if (!empty($thumbnailMethod)) { - $thumbnailUrl = '/admin/asset/get-' . $asset->getType() . '-thumbnail?id=' . $asset->getId(); - if (count($params) > 0) { - $thumbnailUrl .= '&' . http_build_query($params); + // Get URL generator from service container + $urlGenerator = \Pimcore::getContainer()->get('router'); + + // Merge asset ID with params + $routeParams = array_merge(['id' => $asset->getId()], $params); + + // Generate URL using the appropriate route + switch (true) { + case $asset instanceof Model\Asset\Image: + $thumbnailUrl = $urlGenerator->generate('pimcore_admin_asset_getimagethumbnail', $routeParams); + break; + case $asset instanceof Model\Asset\Video: + $thumbnailUrl = $urlGenerator->generate('pimcore_admin_asset_getvideothumbnail', $routeParams); + break; + case $asset instanceof Model\Asset\Document: + $thumbnailUrl = $urlGenerator->generate('pimcore_admin_asset_getdocumentthumbnail', $routeParams); + break; + case $asset instanceof Model\Asset\Folder: + $thumbnailUrl = $urlGenerator->generate('pimcore_admin_asset_getfolderthumbnail', $routeParams); + break; } } From a8445fa4a8ccf11fd691395f6b9a5fd58671aba5 Mon Sep 17 00:00:00 2001 From: Bernhard Rusch Date: Wed, 18 Feb 2026 09:40:28 +0100 Subject: [PATCH 2/3] Added default to switch --- src/Service/GridData/Asset.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Service/GridData/Asset.php b/src/Service/GridData/Asset.php index 24cf3bd98..94e0de3b9 100644 --- a/src/Service/GridData/Asset.php +++ b/src/Service/GridData/Asset.php @@ -107,10 +107,10 @@ public static function getPreviewThumbnail(Model\Asset $asset, array $params = [ if (!empty($thumbnailMethod)) { // Get URL generator from service container $urlGenerator = \Pimcore::getContainer()->get('router'); - + // Merge asset ID with params $routeParams = array_merge(['id' => $asset->getId()], $params); - + // Generate URL using the appropriate route switch (true) { case $asset instanceof Model\Asset\Image: @@ -125,6 +125,8 @@ public static function getPreviewThumbnail(Model\Asset $asset, array $params = [ case $asset instanceof Model\Asset\Folder: $thumbnailUrl = $urlGenerator->generate('pimcore_admin_asset_getfolderthumbnail', $routeParams); break; + default: + break; } } From 9d00a20ba2d81202534768a6882d7e04d1d74402 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Wed, 18 Feb 2026 11:25:28 +0100 Subject: [PATCH 3/3] Delegate thumbnail URL generation to ElementService (#1093) * Initial plan * Delegate thumbnail URL generation to ElementService Co-authored-by: brusch <142037+brusch@users.noreply.github.com> * Add origin=folderPreview parameter to align with folder preview thumbnails Co-authored-by: brusch <142037+brusch@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: brusch <142037+brusch@users.noreply.github.com> --- src/Service/GridData/Asset.php | 33 +++++---------------------------- 1 file changed, 5 insertions(+), 28 deletions(-) diff --git a/src/Service/GridData/Asset.php b/src/Service/GridData/Asset.php index 94e0de3b9..9846fe0c2 100644 --- a/src/Service/GridData/Asset.php +++ b/src/Service/GridData/Asset.php @@ -13,6 +13,7 @@ namespace Pimcore\Bundle\AdminBundle\Service\GridData; +use Pimcore\Bundle\AdminBundle\Service\ElementService; use Pimcore\Model; use Pimcore\Model\Asset\MetaData\ClassDefinition\Data\Data; use Pimcore\Model\Element\Service; @@ -48,7 +49,7 @@ public static function getData(Model\Asset $asset, ?array $fields = null, ?strin $fieldDef = explode('~', $field); if (isset($fieldDef[1]) && $fieldDef[1] === 'system') { if ($fieldDef[0] === 'preview') { - $data[$field] = self::getPreviewThumbnail($asset, ['treepreview' => true, 'width' => 108, 'height' => 70, 'frame' => true]); + $data[$field] = self::getPreviewThumbnail($asset, ['treepreview' => true, 'origin' => 'folderPreview', 'width' => 108, 'height' => 70, 'frame' => true]); } elseif ($fieldDef[0] === 'size') { $size = $asset->getFileSize(); $data[$field] = formatBytes($size); @@ -90,7 +91,6 @@ public static function getData(Model\Asset $asset, ?array $fields = null, ?strin public static function getPreviewThumbnail(Model\Asset $asset, array $params = [], bool $onlyMethod = false): ?string { $thumbnailMethod = ''; - $thumbnailUrl = null; if ($asset instanceof Model\Asset\Image) { $thumbnailMethod = 'getThumbnail'; @@ -104,32 +104,9 @@ public static function getPreviewThumbnail(Model\Asset $asset, array $params = [ return $thumbnailMethod; } - if (!empty($thumbnailMethod)) { - // Get URL generator from service container - $urlGenerator = \Pimcore::getContainer()->get('router'); - - // Merge asset ID with params - $routeParams = array_merge(['id' => $asset->getId()], $params); - - // Generate URL using the appropriate route - switch (true) { - case $asset instanceof Model\Asset\Image: - $thumbnailUrl = $urlGenerator->generate('pimcore_admin_asset_getimagethumbnail', $routeParams); - break; - case $asset instanceof Model\Asset\Video: - $thumbnailUrl = $urlGenerator->generate('pimcore_admin_asset_getvideothumbnail', $routeParams); - break; - case $asset instanceof Model\Asset\Document: - $thumbnailUrl = $urlGenerator->generate('pimcore_admin_asset_getdocumentthumbnail', $routeParams); - break; - case $asset instanceof Model\Asset\Folder: - $thumbnailUrl = $urlGenerator->generate('pimcore_admin_asset_getfolderthumbnail', $routeParams); - break; - default: - break; - } - } + // Delegate to ElementService to keep list view and tile view behavior aligned + $elementService = \Pimcore::getContainer()->get(ElementService::class); - return $thumbnailUrl; + return $elementService->getThumbnailUrl($asset, $params); } }