fix(imagor): only use fit-in when the media folder keeps aspect ratio #48

Merged
csaeum merged 1 commit from fix/imagor-per-folder-aspect-ratio into main 2026-08-09 18:08:29 +00:00
Owner

Closes #47.

Root Cause

fit-in wurde in #44 pauschal für alle Thumbnail-Anfragen aktiviert. keepAspectRatio ist aber eine Pro-Medien-Ordner-Einstellung (media_folder_configuration.keep_aspect_ratio) — Ordner mit deaktiviertem Flag erwarten weiterhin Crop-to-Fill, das pauschale fit-in produzierte dort zu kleine Bilder mit Leerraum statt die Box zu füllen.

Fix

ImagorUrlBuilder::build() fragt jetzt pro Medien-Ordner den tatsächlich konfigurierten Wert ab (via media_folder_id, den RemoteThumbnailUrlSubscriber aus der MediaEntity mitgibt), gecacht pro Request-Lebenszyklus. Kein Ordner bekannt (z. B. Basis-URL-Decorator mit 0x0) → Standardverhalten wie bisher.

Testplan

  • 62/62 Unit-Tests grün in DDEV, inkl. neuer Tests für beide Ordner-Varianten
  • php -l
  • bin/console cache:clear mit komplett geleertem var/cache/dev* — DI-Container kompiliert fehlerfrei mit dem neuen Connection-Argument
  • Live-Test nach Deploy: Kategorie-Teaser-Bilder füllen ihre Spalte wieder, Hochkant-Blog-Bilder bleiben weiterhin eingepasst
Closes #47. ## Root Cause `fit-in` wurde in #44 pauschal für alle Thumbnail-Anfragen aktiviert. `keepAspectRatio` ist aber eine **Pro-Medien-Ordner-Einstellung** (`media_folder_configuration.keep_aspect_ratio`) — Ordner mit deaktiviertem Flag erwarten weiterhin Crop-to-Fill, das pauschale `fit-in` produzierte dort zu kleine Bilder mit Leerraum statt die Box zu füllen. ## Fix `ImagorUrlBuilder::build()` fragt jetzt pro Medien-Ordner den tatsächlich konfigurierten Wert ab (via `media_folder_id`, den `RemoteThumbnailUrlSubscriber` aus der MediaEntity mitgibt), gecacht pro Request-Lebenszyklus. Kein Ordner bekannt (z. B. Basis-URL-Decorator mit `0x0`) → Standardverhalten wie bisher. ## Testplan - [x] 62/62 Unit-Tests grün in DDEV, inkl. neuer Tests für beide Ordner-Varianten - [x] `php -l` - [x] `bin/console cache:clear` mit komplett geleertem `var/cache/dev*` — DI-Container kompiliert fehlerfrei mit dem neuen `Connection`-Argument - [ ] Live-Test nach Deploy: Kategorie-Teaser-Bilder füllen ihre Spalte wieder, Hochkant-Blog-Bilder bleiben weiterhin eingepasst
keepAspectRatio is a per media-folder setting in Shopware
(media_folder_configuration.keep_aspect_ratio), not a shop-wide default.
The blanket fit-in from #44 broke folders that intentionally want a hard
crop, shrinking images with visible padding instead of filling their box.
ImagorUrlBuilder now looks up the actual per-folder value (cached per
request) via the media entity's folder id passed in from
RemoteThumbnailUrlSubscriber, matching Shopware's own decision exactly
instead of assuming one behavior for the whole shop.
csaeum merged commit 31e47e42b8 into main 2026-08-09 18:08:29 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
SW-Plugins/wsc_swplugin_aiseotools!48
No description provided.