KI-Bildkennzeichnung 4/6: Basis-Media-URL-Decorator (AbstractMediaUrlGenerator) #7

Closed
opened 2026-08-02 06:52:28 +00:00 by csaeum · 0 comments
Owner

Teil 4 von 6 der Serie "KI-Bildkennzeichnung" (Art. 50 Abs. 4 KI-VO). Baut auf #4 und #6 auf (nutzt ImagorUrlBuilder).

Hintergrund / warum dieses Issue nötig ist

ResolveRemoteThumbnailUrlExtension (#6) greift NUR bei den Thumbnail-Größen (srcset). Das Storefront-Template rendert das <img src="...">-Fallback aber über die Basis-Media-URL (AbstractMediaUrlGenerator), einen komplett getrennten Erweiterungspunkt. Ohne dessen Behandlung würde das unmarkierte Original als src-Fallback ausgeliefert — eine Lücke, die die Kennzeichnungspflicht aushebeln könnte. Verifiziert gegen developer.shopware.com (use-media-thumbnails.html) und den Core-Quellcode.

Verifizierter Fund

RemoteThumbnailLoader::load() ruft AbstractMediaUrlGenerator::generate() für die Basis-Media-URL auch dann auf, wenn remote_thumbnails aktiv ist (nur die Thumbnails laufen über den separaten Extension-Hook aus #6). Decorieren dieses Services deckt also zuverlässig alle Basis-URLs ab.

Komponenten

  • Neue Klasse src/Media/ImagorMediaUrlGenerator.php extends AbstractMediaUrlGenerator, registriert per decorates="Shopware\Core\Content\Media\Core\Application\AbstractMediaUrlGenerator" in services.xml (.inner injiziert)
  • generate(array $paths) bekommt nur UrlParams (id, path, updatedAt, mimeType — keine Custom Fields). Da immer ein ganzes Array von IDs auf einmal reinkommt: eine Batch-Query über Connection (Raw-SQL, gleiches Muster wie bereits in SitemapSubscriber etabliert) holt ai_status/ai_type für alle angefragten Media-IDs in einem Rutsch
  • URL-Bau pro Eintrag über ImagorUrlBuilder (aus #6)
  • Kein Treffer im Custom-Field-Lookup → Fallback auf .inner-Ergebnis (defensiv)

Akzeptanzkriterien

  • <img src>-Fallback (nicht nur srcset) zeigt bei KI-markierten Bildern auf eine imagor-URL mit Label-Filter
  • Bilder ohne ai_status liefern weiterhin die normale (ggf. per .inner durchgereichte) URL
  • Batch-Query verursacht keinen spürbaren Performance-Einbruch bei Produktlisten mit vielen Bildern (N+1 vermeiden)
Teil 4 von 6 der Serie "KI-Bildkennzeichnung" (Art. 50 Abs. 4 KI-VO). Baut auf #4 und #6 auf (nutzt `ImagorUrlBuilder`). ## Hintergrund / warum dieses Issue nötig ist `ResolveRemoteThumbnailUrlExtension` (#6) greift NUR bei den Thumbnail-Größen (`srcset`). Das Storefront-Template rendert das `<img src="...">`-Fallback aber über die **Basis-Media-URL** (`AbstractMediaUrlGenerator`), einen komplett getrennten Erweiterungspunkt. Ohne dessen Behandlung würde das unmarkierte Original als `src`-Fallback ausgeliefert — eine Lücke, die die Kennzeichnungspflicht aushebeln könnte. Verifiziert gegen developer.shopware.com (`use-media-thumbnails.html`) und den Core-Quellcode. ## Verifizierter Fund `RemoteThumbnailLoader::load()` ruft `AbstractMediaUrlGenerator::generate()` für die Basis-Media-URL **auch dann auf**, wenn `remote_thumbnails` aktiv ist (nur die Thumbnails laufen über den separaten Extension-Hook aus #6). Decorieren dieses Services deckt also zuverlässig alle Basis-URLs ab. ## Komponenten - **Neue Klasse** `src/Media/ImagorMediaUrlGenerator.php extends AbstractMediaUrlGenerator`, registriert per `decorates="Shopware\Core\Content\Media\Core\Application\AbstractMediaUrlGenerator"` in `services.xml` (`.inner` injiziert) - `generate(array $paths)` bekommt nur `UrlParams` (id, path, updatedAt, mimeType — **keine** Custom Fields). Da immer ein ganzes Array von IDs auf einmal reinkommt: **eine** Batch-Query über `Connection` (Raw-SQL, gleiches Muster wie bereits in `SitemapSubscriber` etabliert) holt `ai_status`/`ai_type` für alle angefragten Media-IDs in einem Rutsch - URL-Bau pro Eintrag über `ImagorUrlBuilder` (aus #6) - Kein Treffer im Custom-Field-Lookup → Fallback auf `.inner`-Ergebnis (defensiv) ## Akzeptanzkriterien - [ ] `<img src>`-Fallback (nicht nur `srcset`) zeigt bei KI-markierten Bildern auf eine imagor-URL mit Label-Filter - [ ] Bilder ohne `ai_status` liefern weiterhin die normale (ggf. per `.inner` durchgereichte) URL - [ ] Batch-Query verursacht keinen spürbaren Performance-Einbruch bei Produktlisten mit vielen Bildern (N+1 vermeiden)
Sign in to join this conversation.
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#7
No description provided.