Vererbung Bilder an Varianten

Wir würden gerne in unserem Shop es so einrichten, dass einzelne Varianten die Bilder des Elternelements erben können. Diese sollen dann an die (sofern vorhandenen) Bilder der Variante angehängt werden. Das ganze nur im FrontEnd in der Produktgalerie. Keine Updates in der Datenbank. Gesteuert werden soll es per CustomField am Produkt. So könnten die Varianten im Backend einzeln gepflegt werden, Referenzbilder für alle Varianten aber über das Elternelement gesteuert werden. Ansonsten ist das Pflegen über das Backend undenkbar.

Beim Versuch, das als Subscriber zu schreiben und auf das ProductPageLoadedEvent zu setzen sind insofern erfolgreich, dass die zusätzlichen Medien in product.media ergänzt sind. Das CMS Slider Element liest seine Daten aber aus element.data.sliderItems. Dieses ist mit product.media gemappt, wird aber anscheinend vorher befüllt. Könnte man hier auf ein anderes Event setzen wenn man das als Subscriber baut?

Zweiter Versuch über AbstractCmsElementResolver die enrich-Funktion zu nutzen war auch nicht erfolgreich.

Het jemand vielleicht einen Tip oder Ansatz wie man das bewerkstelligen kann?

Ja da haben wir auch schon dran gehangen, was du brauchst ist das CmsPageLoadedEvent:

public static function getSubscribedEvents(): array
    {
        return [
            CmsPageLoadedEvent::class => 'onCmsPageLoaded'
        ];
    }
public function onCmsPageLoaded(CmsPageLoadedEvent $event): void
    {

        $pages = $event->getResult();
        $products = new EntityCollection();

        foreach($pages as $page) {
            $blocks = $page->getSections()->getBlocks();
            foreach($blocks as $block) {
                $slots = $block->getSlots();
                foreach($slots as $slot) {

                    switch($slot->getType())
                    {
                        case 'product-box':
                            if ($slot->getData()->getProduct())
                                $products->add($slot->getData()->getProduct());
                            break;
                        case 'product-listing':
                            foreach($slot->getData()->getListing()->getEntities() as $product) {
                                $products->add($product);
                            }
                            break;
                        case 'product-slider':
                            foreach($slot->getData()->getProducts() as $product) {
                                $products->add($product);
                            }
                            break;
                    }
                }
            }
        }
        if ($products->count() > 0)
            // hier enthält $products dann alle artikel aus der cms seite, da kannst du dann ansetzen
        }

    }

Hi aggrosoft,
danke fürs Feedback. Mit Produktgalerie hab ich mich etwas falsch ausgedrückt. Ich meinte den Image Slider auf der Produktdetailseite. Also geht es um den Slot mit type: „image-gallery“.
Darin ist data aber beim Event schon mit Shopware\Core\Content\Cms\SalesChannel\Struct\ImageSliderStruct gefüllt. Das ganze mappt sich aus product.media. Gibt es ein früheres Event das dafür besser geeignet wäre?

Ich habe testhalber mal aus dem page request das Produkt ermittelt (oder kommt man in diesem Event leichter an das Produkt?), die Media mit den Bildern des Elternelements angereichert und diese Elemente in die slot data gesetzt.
Das funktioniert für die Image gallery. Muss man aber die Elemente noch in ImageSliderStruct wandeln? Oder ist das prinzipiell das gleiche nur mit anderem Namen?