# Product-Properties in Produkt-Slider

**URL:** https://forum.shopware.com/t/product-properties-in-produkt-slider/69544
**Category:** Programmierung
**Created:** [11. September 2020 um 15:54 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544 "2020-09-11T15:54:28Z")
**Posts on this page:** 19
**Page:** 2

<div class="post-metadata">

### Author: ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)
#### Post date: [21. Januar 2022 um 22:45 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/22 "2022-01-21T22:45:03Z")

</div>

addAssociation – wie das Englische Wort add ausdrückt – fügt eine weitere Association hinzu. Es überschreibt nichts.

Je nach Kontext erstellen die Plugins auch ihre eigene Criteria, dass diese dann voreinander getrennt sind.

Was bei dir schlief läuft, ist mir auf den ersten Blick nicht ersichtlich.

---

<div class="post-metadata">

### Author: ![myshoptheme](https://avatars.discourse-cdn.com/v4/letter/m/4da419/32.png) [@myshoptheme](https://forum.shopware.com/u/myshoptheme)
#### Post date: [24. Januar 2022 um 06:48 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/23 "2022-01-24T06:48:32Z")

</div>

@Max_Shop so dachte ich das auch.

Nach meinen Tests liegt es auch nicht an addAssociation, sondern daran, dass bei Plugin 1 die **collect-Function und die enrich-Funktion nicht mehr aufgerufen werden**. getType() hingegen schon. Woran kann das liegen?

Es ist praktisch so, dass nur die collect-function des zuletzt installierten plugins aufgerufen wird.

---

<div class="post-metadata">

### Author: ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)
#### Post date: [24. Januar 2022 um 09:21 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/24 "2022-01-24T09:21:39Z")

</div>

Ich habe mir eben deinen Code angesehen…

Deine Class extended nicht die Abstract Class (nicht sicher, ob notwendig)

```auto
    foreach ($criteriaCollection as $productCriteria) {
            foreach ($productCriteria as $criteria) {
                $criteria->addAssociation('options.group');
            }
        }

```

Du erstellst eine $criteria Variable, verwirfst diese nach dem foreach aber wieder. Ich weiß nicht, was du dir da dann erhoffst.

Du musst die $criteria auch wieder der $criteriaCollection zuweisen.

---

<div class="post-metadata">

### Author: ![myshoptheme](https://avatars.discourse-cdn.com/v4/letter/m/4da419/32.png) [@myshoptheme](https://forum.shopware.com/u/myshoptheme)
#### Post date: [24. Januar 2022 um 09:40 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/25 "2022-01-24T09:40:24Z")

</div>

@Max_Shop danke für die Rückmeldung.

> Deine Class extended nicht die Abstract Class (nicht sicher, ob notwendig)

Hatte ich nicht gemacht, weil es in den obigen Code-Beispielen auch niemand gemacht hat… Ich habe mal extends auf extends ProductSliderCmsElementResolver eingefügt… machte aber keinen Unterschied

> Du erstellst eine $criteria Variable, verwirfst diese nach dem foreach aber wieder. Ich weiß nicht, was du dir da dann erhoffst.

also quasi hiermit:  
`$criteriaCollection->add('product-slider' . '_' . $slot->getUniqueIdentifier(), ProductDefinition::class, $criteria);`

Ich bin mir aber nicht sicher, ob das mein Problem löst… ich habe am Anfang der collect-Funktion ein `dump('foobar1')` eingefügt. Daher weiß ich, dass die Funktion gar nicht erst ausgeführt wird, wenn das zweite Plugin aktiv ist.

---

<div class="post-metadata">

### Author: ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)
#### Post date: [24. Januar 2022 um 09:51 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/26 "2022-01-24T09:51:28Z")

</div>

Ich brauche Kaffee… dump ist natürlich eine Symfony-Funktion (ursprüngliche Antwort war Unsinn).

extends AbstractCmsElementResolver wäre als extend vermutlich passender.

In deiner service.xml sind beide Class eingetragen?

---

<div class="post-metadata">

### Author: ![myshoptheme](https://avatars.discourse-cdn.com/v4/letter/m/4da419/32.png) [@myshoptheme](https://forum.shopware.com/u/myshoptheme)
#### Post date: [24. Januar 2022 um 09:55 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/27 "2022-01-24T09:55:11Z")

</div>

@Max_Shop

nein dump läuft wunderbar und wird in der symfony console ausgegeben:

> **[The VarDumper Component (Symfony Docs)](https://symfony.com/doc/current/components/var_dumper.html#the-dump-function)**

Wie gesagt, es funktioniert ja auch, wenn man nur eines der Plugins betrachtet… nur wenn zwei Plugins da dran wollen, wird die collect-Funktion des anderen nicht mehr ausgeführt…

---

<div class="post-metadata">

### Author: ![myshoptheme](https://avatars.discourse-cdn.com/v4/letter/m/4da419/32.png) [@myshoptheme](https://forum.shopware.com/u/myshoptheme)
#### Post date: [24. Januar 2022 um 10:05 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/28 "2022-01-24T10:05:08Z")

</div>

Aktualisiertes Codebeispiel:

PLUGIN 1:

```auto
<?php declare(strict_types=1);

namespace DockwareSamplePlugin\Core\Content\Product\Cms;

use Shopware\Core\Content\Cms\Aggregate\CmsSlot\CmsSlotEntity;
use Shopware\Core\Content\Cms\DataResolver\Element\AbstractCmsElementResolver;
use Shopware\Core\Content\Product\Cms\ProductSliderCmsElementResolver;
use Shopware\Core\Content\Cms\DataResolver\Element\ElementDataCollection;
use Shopware\Core\Content\Cms\DataResolver\ResolverContext\ResolverContext;
use Shopware\Core\Content\Cms\DataResolver\CriteriaCollection;

class DockwareExtendProductSliderCmsElementResolver extends AbstractCmsElementResolver
{
    /** @var ProductSliderCmsElementResolver $elementResolver */
    private $elementResolver;

    public function __construct(ProductSliderCmsElementResolver $elementResolver)
    {
        $this->elementResolver = $elementResolver;
    }

    public function getType(): string
    {
        return $this->elementResolver->getType();
    }

    public function collect(CmsSlotEntity $slot, ResolverContext $resolverContext): ?CriteriaCollection
    {
        $criteriaCollection = $this->elementResolver->collect($slot, $resolverContext);

        foreach ($criteriaCollection as $productCriteria) {
            foreach ($productCriteria as $criteria) {
                $criteria->addAssociation('media');
                dump('Dockware!');
                dump($productCriteria);
            }
        }

        return $criteriaCollection;
    }

    public function enrich(CmsSlotEntity $slot, ResolverContext $resolverContext, ElementDataCollection $result): void
    {
        $this->elementResolver->enrich($slot, $resolverContext, $result);
    }
}

```

```auto
<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>
        <service id="DockwareSamplePlugin\Core\Content\Product\Cms\DockwareExtendProductSliderCmsElementResolver">
            <argument type="service" id="Shopware\Core\Content\Product\Cms\ProductSliderCmsElementResolver"/>
            <tag name="shopware.cms.data_resolver"/>
        </service>
    </services>
</container>

```

* * *

PLUGIN 2:

```auto
<?php declare(strict_types=1);

namespace DockwareFooSamplePlugin\Core\Content\Product\Cms;

use Shopware\Core\Content\Cms\Aggregate\CmsSlot\CmsSlotEntity;
use Shopware\Core\Content\Cms\DataResolver\Element\AbstractCmsElementResolver;
use Shopware\Core\Content\Product\Cms\ProductSliderCmsElementResolver;
use Shopware\Core\Content\Cms\DataResolver\Element\ElementDataCollection;
use Shopware\Core\Content\Cms\DataResolver\ResolverContext\ResolverContext;
use Shopware\Core\Content\Cms\DataResolver\CriteriaCollection;

class DockwareExtendProductSliderCmsElementResolver extends AbstractCmsElementResolver
{
    /** @var ProductSliderCmsElementResolver $elementResolver */
    private $elementResolver;

    public function __construct(ProductSliderCmsElementResolver $elementResolver)
    {
        $this->elementResolver = $elementResolver;
    }

    public function getType(): string
    {
        return $this->elementResolver->getType();
    }

    public function collect(CmsSlotEntity $slot, ResolverContext $resolverContext): ?CriteriaCollection
    {
        $criteriaCollection = $this->elementResolver->collect($slot, $resolverContext);

        foreach ($criteriaCollection as $productCriteria) {
            foreach ($productCriteria as $criteria) {
                $criteria->addAssociation('properties.group');
                dump('DockwareFoo!');
                dump($productCriteria);
            }
        }

        return $criteriaCollection;
    }

    public function enrich(CmsSlotEntity $slot, ResolverContext $resolverContext, ElementDataCollection $result): void
    {
        $this->elementResolver->enrich($slot, $resolverContext, $result);
    }
}

```

```auto
<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>
        <service id="DockwareFooSamplePlugin\Core\Content\Product\Cms\DockwareExtendProductSliderCmsElementResolver">
            <argument type="service" id="Shopware\Core\Content\Product\Cms\ProductSliderCmsElementResolver"/>
            <tag name="shopware.cms.data_resolver"/>
        </service>
    </services>
</container>

```

---

<div class="post-metadata">

### Author: ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)
#### Post date: [24. Januar 2022 um 10:16 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/29 "2022-01-24T10:16:09Z")

</div>

Das einzige, was mir momentan noch auffällt ist, dass bei fehlt. Ich bin mir aber nicht ganz sicher, ob dies in diesem Kontext notwendig ist. Dann duften diese vermutlich gar nicht ausgeführt werden.

Ich teste es später mal per Copy&Past.

---

<div class="post-metadata">

### Author: ![myshoptheme](https://avatars.discourse-cdn.com/v4/letter/m/4da419/32.png) [@myshoptheme](https://forum.shopware.com/u/myshoptheme)
#### Post date: [24. Januar 2022 um 15:28 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/30 "2022-01-24T15:28:58Z")

</div>

@Max_Shop

> Das einzige, was mir momentan noch auffällt ist, dass bei fehlt.

Dein Satz war leider nicht ganz vollständig. Falls Du beim Copy & Past einen Fehler findest sag gern bescheid. Ich kann Dir auch einen Dropbox-Link zu den beiden Demoplugins mit dem Code schicken.

---

<div class="post-metadata">

### Author: ![AlexBS](https://avatars.discourse-cdn.com/v4/letter/a/ed655f/32.png) [@AlexBS](https://forum.shopware.com/u/AlexBS)
#### Post date: [22. März 2022 um 08:27 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/31 "2022-03-22T08:27:56Z")

</div>

@ [myshoptheme](https://forum.shopware.com/u/myshoptheme) dürfte ich dich um die beiden Plugins bitten? Sitze gerade vor dem gleichen Problem. Das wär super, danke dir! 🙂  
LG Alex

---

<div class="post-metadata">

### Author: ![RomanW](https://avatars.discourse-cdn.com/v4/letter/r/57b2e6/32.png) [@RomanW](https://forum.shopware.com/u/RomanW)
#### Post date: [1. April 2022 um 12:33 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/32 "2022-04-01T12:33:14Z")

</div>

Hallo,

dieses Plugin löst das Problem:

> **[GitHub - MelvinAchterhuis/MelvPropertiesProductbox](https://github.com/MelvinAchterhuis/MelvPropertiesProductbox)**
>
> Contribute to MelvinAchterhuis/MelvPropertiesProductbox development by creating an account on GitHub.

sg Roman

---

<div class="post-metadata">

### Author: ![zirkeldesign](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/zirkeldesign/32/14671_2.png) [@zirkeldesign](https://forum.shopware.com/u/zirkeldesign)
#### Post date: [14. Juni 2022 um 07:29 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/33 "2022-06-14T07:29:07Z")

</div>

> [@myshoptheme](#):
>
> ` extends AbstractCmsElementResolver`

Hej, wurde der Grund gefunden, warum der Resolver des zweiten Plugins nicht collect() und enrich() ausgeführt hatte? Sitze gerade vor dem gleichen Problem und erkenne einfach den Grund nicht.

* * *

_Ok, habe nun den Grund gefunden:_

[Die Klasse `CmsSlotsDataResolver` fügt (Stand 4.12.0) im `__construct()` alle Einträge von $resolvers in ein assoziatives Array ein](https://github.com/shopware/core/blob/85889d718a1d34e404dcf8213e71d2cbde0df8c6/Content/Cms/DataResolver/CmsSlotsDataResolver.php#L51). Dabei wird der string von `getType` des Resolvers als key genutzt und mehrere Resolver eines CMS Elements überschreiben entsprechend den Vorherigen.

Somit ist es derzeit nicht möglich mehrere Resolver zu einem Element zu nutzen. 🥴

---

<div class="post-metadata">

### Author: ![AlexBS](https://avatars.discourse-cdn.com/v4/letter/a/ed655f/32.png) [@AlexBS](https://forum.shopware.com/u/AlexBS)
#### Post date: [21. November 2022 um 22:42 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/34 "2022-11-21T22:42:03Z")

</div>

Hallo,

komischerweise wird von heute auf auf morgen die enrich und collect Funktion meines Resolvers nicht mehr aufgerufen. Der manufacturer im Product Slider ist jetzt leer. Konstruktor wird aufgerufen, aber in enrich und collect geht er erst gar nicht rein.

Woran kann das liegen? 😮

Mein Resolver:

```auto
use Shopware\Core\Content\Cms\Aggregate\CmsSlot\CmsSlotEntity;
use Shopware\Core\Content\Cms\DataResolver\Element\AbstractCmsElementResolver;
use Shopware\Core\Content\Product\Cms\ProductSliderCmsElementResolver;
use Shopware\Core\Content\Cms\DataResolver\Element\ElementDataCollection;
use Shopware\Core\Content\Cms\DataResolver\ResolverContext\ResolverContext;
use Shopware\Core\Content\Cms\DataResolver\CriteriaCollection;

class ExtendProductSliderCmsElementResolver extends AbstractCmsElementResolver
{
    /** @var ProductSliderCmsElementResolver $elementResolver */
    private $elementResolver;

    public function __construct(ProductSliderCmsElementResolver $elementResolver)
    {
        $this->elementResolver = $elementResolver;
    }

    public function getType(): string
    {
        return 'extended-product-slider-cms-element-resolver';
    }

    public function collect(CmsSlotEntity $slot, ResolverContext $resolverContext): ?CriteriaCollection
    {
        $criteriaCollection = $this->elementResolver->collect($slot, $resolverContext);

        foreach ($criteriaCollection as $productCriteria) {
            foreach ($productCriteria as $criteria) {
                $criteria->addAssociation('properties.group');
                $criteria->addAssociation('manufacturer');
            }
        }
        return $criteriaCollection;
    }

    public function enrich(CmsSlotEntity $slot, ResolverContext $resolverContext, ElementDataCollection $result): void
    {
        $this->elementResolver->enrich($slot, $resolverContext, $result);
    }
}

```

Der Service meiner service.xml

```auto
<service id="Bs\ExtendedListing\Core\Content\Product\Cms\ExtendProductSliderCmsElementResolver">
   <argument type="service" id="Shopware\Core\Content\Product\Cms\ProductSliderCmsElementResolver"/>
   <tag name="shopware.cms.data_resolver"/>
</service>

```

LG Alex

---

<div class="post-metadata">

### Author: ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)
#### Post date: [22. November 2022 um 08:56 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/35 "2022-11-22T08:56:56Z")

</div>

Was sagt der error log? Shopware-Update, Plugin Update/installiert, PHP Update… ?

---

<div class="post-metadata">

### Author: ![AlexBS](https://avatars.discourse-cdn.com/v4/letter/a/ed655f/32.png) [@AlexBS](https://forum.shopware.com/u/AlexBS)
#### Post date: [22. November 2022 um 18:06 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/36 "2022-11-22T18:06:52Z")

</div>

Error log nicht verdächtig, Shopware Updates ja in letzter Zeit, Plugin Updates auch ja, genauso PHP Update vom Server. Habe es aber vorhin auf meiner 0815 Docker Installation lokal probiert, da funktioniert es auch nicht mehr 😮 Auf der lokalen Installation laufen keine Plugins und noch SW 6.4.14.0. und PHP 8.0, sollte also funktionieren…

Edit: Lokal funktioniert es jetzt doch, das heißt irgendwo auf meiner Produktionsumgebung ist der Wurm drinnen 😮

---

<div class="post-metadata">

### Author: ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)
#### Post date: [22. November 2022 um 19:50 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/37 "2022-11-22T19:50:17Z")

</div>

Bringt dir zwar nichts, bei mir läuft es lokal aber auch 😁 Wird eher ein individuelles Problem sein.

---

<div class="post-metadata">

### Author: ![AlexBS](https://avatars.discourse-cdn.com/v4/letter/a/ed655f/32.png) [@AlexBS](https://forum.shopware.com/u/AlexBS)
#### Post date: [23. November 2022 um 06:55 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/38 "2022-11-23T06:55:02Z")

</div>

Haha danke dir! Das Hilft mir schon sehr viel. Es werkelt scheinbar gerade eine Entwicklerbude an einem ihrer Plugins in der Live Umgebung herum, somit wird das Problem vermutlich irgendwo von ihnen verursacht. Kann leider aktuell keine Plugins deaktivieren, da ich ihnen vermutlich sonst ins Handwerk pfusche 😃

---

<div class="post-metadata">

### Author: ![AlexBS](https://avatars.discourse-cdn.com/v4/letter/a/ed655f/32.png) [@AlexBS](https://forum.shopware.com/u/AlexBS)
#### Post date: [25. November 2022 um 12:36 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/39 "2022-11-25T12:36:25Z")

</div>

Ich bin jetzt weitergekommen. Der Pluginhersteller hatte auch einen Resolver für den CMS Product Slider und scheinbar hat dieser meinen Resolver einfach überschrieben.  
Habe mir angeschaut, wie sie das gecoded haben und mir bisschen was abgeschaut. Scheinbar war meine Variante nicht sauber und nachhaltig.

Sie haben nicht den ProductSliderCmsResolver übergeben sondern das CmsElementResolverInterface. Zusätzlich haben sie noch den Service etwas anders in der service.xml registriert. Unten der Auszug aus meinem abgeänderen Code, wie es funktioniert.

```auto
use Shopware\Core\Content\Cms\Aggregate\CmsSlot\CmsSlotEntity;
use Shopware\Core\Content\Cms\DataResolver\Element\CmsElementResolverInterface;
use Shopware\Core\Content\Product\Cms\ProductSliderCmsElementResolver;
use Shopware\Core\Content\Cms\DataResolver\Element\ElementDataCollection;
use Shopware\Core\Content\Cms\DataResolver\ResolverContext\ResolverContext;
use Shopware\Core\Content\Cms\DataResolver\CriteriaCollection;

class ExtendProductSliderCmsElementResolver extends ProductSliderCmsElementResolver
{
    /**
     * @var ProductSliderCmsElementResolver
     */
    private $parent;

    public function __construct(CmsElementResolverInterface $parent)
    {
        $this->parent = $parent;
    }

    public function getType(): string
    {
        return 'product-slider';
    }

    public function collect(CmsSlotEntity $slot, ResolverContext $resolverContext): ?CriteriaCollection
    {
        $criteriaCollection = $this->parent->collect($slot, $resolverContext);

        foreach ($criteriaCollection as $productCriteria) {
            foreach ($productCriteria as $criteria) {
                $criteria->addAssociation('properties.group');
                $criteria->addAssociation('manufacturer');
            }
        }
        return $criteriaCollection;
    }

    public function enrich(CmsSlotEntity $slot, ResolverContext $resolverContext, ElementDataCollection $result): void
    {
        $this->parent->enrich($slot, $resolverContext, $result);
    }
}

```

```auto
<service id="Bs\ExtendedListing\Resolver\ExtendProductSliderCmsElementResolver" decorates="Shopware\Core\Content\Product\Cms\ProductSliderCmsElementResolver">
       <argument type="service" id="Bs\ExtendedListing\Resolver\ExtendProductSliderCmsElementResolver.inner"/>
       <tag name="shopware.cms.data_resolver" />
</service>

```

Ich hoffe, das kann auch einigen anderen hier helfen.

LG Alex

---

<div class="post-metadata">

### Author: ![kathi](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/kathi/32/20047_2.png) [@kathi](https://forum.shopware.com/u/kathi)
#### Post date: [26. November 2024 um 11:20 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/40 "2024-11-26T11:20:23Z")

</div>

Hi zusammen,

vielen Dank für eure vielen hilfreichen Hinweise! Leider hatte ich es damit trotzdem nicht geschafft, in Shopware 6.6 den Hersteller in die Produktslider zu bekommen. In meinem Fall laden die Slider die Produkte aus dynamischen Produktgruppen (AKA product streams). Nach einigem Debuggen habe ich dann herausgefunden, dass bei solchen Slidern in der `ProductSliderCmsElementResolver::enrich()` nicht einfach das Ergebnis mit den Kriterien aus `ProductSliderCmsElementResolver::collect()` zurückgegeben wird (dort wäre die komplette Herstellerentität nämlich schon drin), sondern auf Basis der Produkt-IDs _nochmal_ eine separate Abfrage auf das Produkt-Repository gemacht wird (siehe `ProductSliderCmsElementResolver::fetchProductsByIds()`). Das Ergebnis dieser Abfrage kommt am Ende im Template an - leider ohne den Hersteller und ohne schicke Möglichkeit zum Einklinken.

Am Ende sieht meine Lösung so aus:

`src/DataResolver/ProductSliderCmsElementResolver.php`

```php
<?php

declare(strict_types=1);

namespace Example\Plugin\DataResolver;

use Shopware\Core\Content\Cms\Aggregate\CmsSlot\CmsSlotEntity;
use Shopware\Core\Content\Cms\DataResolver\CriteriaCollection;
use Shopware\Core\Content\Cms\DataResolver\Element\AbstractCmsElementResolver;
use Shopware\Core\Content\Cms\DataResolver\Element\CmsElementResolverInterface;
use Shopware\Core\Content\Cms\DataResolver\Element\ElementDataCollection;
use Shopware\Core\Content\Cms\DataResolver\ResolverContext\ResolverContext;
use Shopware\Core\Content\Cms\SalesChannel\Struct\ProductSliderStruct;
use Shopware\Core\Content\Product\ProductEntity;

class ProductSliderCmsElementResolver extends AbstractCmsElementResolver
{
    protected const PRODUCT_SLIDER_ENTITY_FALLBACK = 'product-slider-entity-fallback';

    public function __construct(
        protected CmsElementResolverInterface $decorated,
    ) {
    }

    public function getType(): string
    {
        return $this->getDecorated()->getType();
    }

    public function getDecorated(): CmsElementResolverInterface
    {
        return $this->decorated;
    }

    public function collect(CmsSlotEntity $slot, ResolverContext $resolverContext): ?CriteriaCollection
    {
        return $this->getDecorated()->collect($slot, $resolverContext);
    }

    public function enrich(CmsSlotEntity $slot, ResolverContext $resolverContext, ElementDataCollection $result): void
    {
        $this->getDecorated()->enrich($slot, $resolverContext, $result);

        $config = $slot->getFieldConfig();
        $productConfig = $config->get('products');

        if ($productConfig->isProductStream() && $productConfig->getValue()) {
            $entitySearchResult = $result->get(
                self::PRODUCT_SLIDER_ENTITY_FALLBACK . '_' . $slot->getUniqueIdentifier()
            );

            if ($entitySearchResult === null) {
                return;
            }

            /** @var ProductSliderStruct $slider */
            $slider = $slot->getData();
            $products = $slider->getProducts();

            /** @var \Shopware\Core\Content\Product\ProductEntity $product */
            foreach ($products as $product) {
                $productResult = $entitySearchResult->get($product->getId());

                if ($productResult instanceof ProductEntity) {
                    $product->setManufacturer($productResult->getManufacturer());
                }
            }
        }
    }
}

```

`src/Resources/config/services.xml`

```xml
<?xml version="1.0" ?>

<container xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns="http://symfony.com/schema/dic/services"
           xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd"
>
    <services>
        <service id="Example\Plugin\DataResolver\ProductSliderCmsElementResolver"
                 decorates="Shopware\Core\Content\Product\Cms\ProductSliderCmsElementResolver"
                 public="true"
        >
            <argument type="service" id="Example\Plugin\DataResolver\ProductSliderCmsElementResolver.inner"/>
            <tag name="shopware.cms.data_resolver"/>
        </service>
    </services>
</container>

```

`src/Resources/views/storefront/component/product/card/box-standard.html.twig`

```html
{% sw_extends "@Storefront/storefront/component/product/card/box-standard.html.twig" %}

{% block component_product_box_name %}
    <a href="{{ seoUrl('frontend.detail.page', {productId: id}) }}"
       class="product-name"
       title="{{ name }}"
    >
        <span class="manufacturer">{{ product.manufacturer.translated.name }}</span>
        {{ name }}
    </a>
{% endblock %}

```

Die Herstellerentität aus dem ursprünglichen Ergebnis wird also einfach nur in das neue Ergebnis kopiert. Das ist natürlich fehleranfällig, theoretisch könnten Objekte im ursprünglichen Ergebnis fehlen und somit dann auch die Hersteller im neuen Ergebnis. Sauberer wäre es, in solche einem Fall nochmal eine Abfrage zu machen, um die fehlenden Herstellerdaten zu holen. Für meine Zwecke genügt der obige Workaround jedoch.

[Vorherige Seite](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544.md?page=1)
