# 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:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![devnullroot](https://avatars.discourse-cdn.com/v4/letter/d/3bc359/32.png) [@devnullroot](https://forum.shopware.com/u/devnullroot)\
**Post date:** [11. September 2020 um 15:54 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/1 "2020-09-11T15:54:28Z")

</div>

Moin Zusammen,

nachdem ich bereits die Listings um Properties und Hersteller-Daten erweitert habe, möchte ich auch Produkte die in Erlebniswelt-Slidern um diese Daten erweitern. Hierzu haben mir bisher hauptsächlich diese beidem Threads geholfen (danke!):

[https://forum.shopware.com/discussion/62944/daten-von-subscriber-controller-an-cms-element-uebergeben](https://forum.shopware.com/discussion/62944/daten-von-subscriber-controller-an-cms-element-uebergeben)  
[https://forum.shopware.com/discussion/68787/wie-bekomme-ich-properties-in-cms-element-mit-produkt](https://forum.shopware.com/discussion/68787/wie-bekomme-ich-properties-in-cms-element-mit-produkt)

Mein `collect` sieht aktuell so aus:

```
class SliderElementResolver extends ProductSliderCmsElementResolver
{
    public function collect(CmsSlotEntity $slot, ResolverContext $resolverContext): ?CriteriaCollection
    {
        $criteriaCollection = new CriteriaCollection();

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

        if (!$products || $products->isMapped() || $products->getValue() === null) {
            return null;
        }

        if ($products->isStatic() && $products->getValue()) {
            $criteria = new Criteria($products->getValue());
            $criteria->addAssociation('properties.group');
            $criteria->addAssociation('manufacturer.media');
            $criteriaCollection->add('product-slider' . '_' . $slot->getUniqueIdentifier(), ProductDefinition::class, $criteria);
        }

        return $criteriaCollection->all() ? $criteriaCollection : null;
    }
}

```

Die Gruppierung der Daten erfolgt im bereits vorhandenen `ProductEvents::PRODUCT_LOADED_EVENT` Listener.

Eigentlich funktioniert das auch so. Was mich nur wundert ist, dass in `$criteriaCollection->add` der erste Parameter `$key` von mir hardcecodet mit `product-slider` geprefixt werden musste, obwohl hierfür in der Eltern-Klasse `ProductSliderCmsElementResolver` eine Konstante `STATIC_SEARCH_KEY = "product-slider"` existiert und diese dort auch als Prefix für $key genutzt wird.

Diese ist aber `private`, nicht `protected` und kann somit nicht genutzt werden. So ist das Ganze auf meiner Seite nicht sonderlich Update-resistent. Es gibt auch noch ein `getType()`, was ebenfalls ‚product-slider‘ zurückgibt - aber ebenfalls hard und nicht per STATIC\_SEARCH\_KEY.

Ist das von _Shopware_ unsauber programmiert, oder mache _ich_ hier grundsätzlich etwas falsch? (Worauf mich das `private` ja vielleicht hinweisen möchte…) ![Frown](https://forum.shopware.com/plugins/CKEditor/plugins/smiley/images/frown.png "Frown")

Besten Dank,  
devnulroot

---

<div class="post-metadata">

**Author:** ![devnullroot](https://avatars.discourse-cdn.com/v4/letter/d/3bc359/32.png) [@devnullroot](https://forum.shopware.com/u/devnullroot)\
**Post date:** [13. September 2020 um 12:32 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/2 "2020-09-13T12:32:33Z")

</div>

Moin Zusammen,

als Hinweis: Die grundsätzliche Herangehensweise ist mir beim Update auf die 6.3.1.0 auf die Füße gefallen, weshalb ich dank @Shyim‍ nun Dependency Injection benutze. Falls noch mal wer hierdrüber stolpert:

```
class MyResolver
{
    /** @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 = new CriteriaCollection();

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

        if (!$products || $products->isMapped() || $products->getValue() === null) {
            return null;
        }

        if ($products->isStatic() && $products->getValue()) {
            $criteria = new Criteria($products->getValue());
            $criteria->addAssociation('properties.group');
            $criteria->addAssociation('manufacturer.media');
            $criteriaCollection->add('product-slider' . '_' . $slot->getUniqueIdentifier(), ProductDefinition::class, $criteria);
        }
        return $criteriaCollection->all() ? $criteriaCollection : null;
    }

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

```

services.xml Auszug:

Beste Grüße,  
devnullroot

---

<div class="post-metadata">

**Author:** ![Adelbert](https://avatars.discourse-cdn.com/v4/letter/a/b782af/32.png) [@Adelbert](https://forum.shopware.com/u/Adelbert)\
**Post date:** [21. Januar 2021 um 12:02 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/3 "2021-01-21T12:02:56Z")

</div>

@devnullroot‍ Danke für deinen Code. Hast du deinen Service über das Decorator Pattern registriert? Falls nein, muss noch etwas anderes in services.xml stehen?

---

<div class="post-metadata">

**Author:** ![devnullroot](https://avatars.discourse-cdn.com/v4/letter/d/3bc359/32.png) [@devnullroot](https://forum.shopware.com/u/devnullroot)\
**Post date:** [21. Januar 2021 um 15:46 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/4 "2021-01-21T15:46:34Z")

</div>

Sorry, hab grade so gar keine Zeit, aber der Code sollte, bis auf Namensanpassungen, genau so laufen. Bei mir ist jedenfalls nicht mehr drin, hab eben kurz nachgesehen.

Beste Grüße,  
devnullroot

---

<div class="post-metadata">

**Author:** ![devnullroot](https://avatars.discourse-cdn.com/v4/letter/d/3bc359/32.png) [@devnullroot](https://forum.shopware.com/u/devnullroot)\
**Post date:** [21. Januar 2021 um 15:55 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/5 "2021-01-21T15:55:46Z")

</div>

Kurzer Nachtrag: Der Code funktioniert NICHT bei Slidern mit dynamischen Produktgruppen. Hinter der if Abfrage mit isStatic() habe ich als Fallback die Original-Methode aufgerufen:

```
else {
    $criteriaCollection = $this->elementResolver->collect($slot, $resolverContext);
}

```

Die dynamischen Produktgruppen werden da über die private Methode “collectByProductStream” abgefrühstückt. Die habe ich nicht angepasst/überschrieben und auch keine Möglichkeit gefunden hier $criteria zu erweitern ☹

Beste Grüße,  
devnullroot

---

<div class="post-metadata">

**Author:** ![Stephan4p](https://avatars.discourse-cdn.com/v4/letter/s/ba8739/32.png) [@Stephan4p](https://forum.shopware.com/u/Stephan4p)\
**Post date:** [24. März 2021 um 14:27 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/6 "2021-03-24T14:27:46Z")

</div>

Ich habe heute diese Funktion ebenfalls benötigt. Vielen dank für die Ausführung. Es ist aber grundsätzlich nicht nötig den collect komplett neu zu definieren. Hier besteht aus meiner sicht auch eher das Problem das bei einem update der collect im zweifels fall auch angepasst werden muss. es Funktioniert auch mit dem Parent collect welcher dann nur um die Association erweiter

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

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

    return $criteriaCollection;
}

```

hier sollten dann auch die Probleme mit den Privaten Klassen Constanten nicht mehr existieren und bei mir funktioniert auch ein dynamische Produkt Gruppe

---

<div class="post-metadata">

**Author:** ![devnullroot](https://avatars.discourse-cdn.com/v4/letter/d/3bc359/32.png) [@devnullroot](https://forum.shopware.com/u/devnullroot)\
**Post date:** [25. März 2021 um 12:17 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/7 "2021-03-25T12:17:30Z")

</div>

Moin @Stephan4p ,

super, vielen Dank für die wesentlich bessere und elegantere Implementierung!

Beste Grüße,  
devnullroot

---

<div class="post-metadata">

**Author:** ![Gunnarius](https://avatars.discourse-cdn.com/v4/letter/g/ed655f/32.png) [@Gunnarius](https://forum.shopware.com/u/Gunnarius)\
**Post date:** [10. Juni 2021 um 10:51 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/8 "2021-06-10T10:51:36Z")

</div>

Moin zusammen,  
ich bin auch gerade dabei einen Resolver mit den Decorator Pattern zu erweitern ich möchte das Hersteller-Logo rein bekommen. Also die URL dazu. Leider wird mir die URL bisher noch nicht ausgeben.

Bisher habe ich das hier gebaut:

```auto
        $criteria->addAssociation('manufacturer.media');

        $criteriaCollection = new CriteriaCollection();
        $criteriaCollection->add('product_' . $slot->getUniqueIdentifier(), ProductDefinition::class, $criteria);

```

Ein dump($criteriaCollection) gibt mir nur leere Felder bei manufacturer.media aus.  
Wie kann ich die Werte bekommen?  
Muss ich einen API call machen?

---

<div class="post-metadata">

**Author:** ![cinquecento](https://avatars.discourse-cdn.com/v4/letter/c/cc9497/32.png) [@cinquecento](https://forum.shopware.com/u/cinquecento)\
**Post date:** [8. Juli 2021 um 13:31 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/9 "2021-07-08T13:31:38Z")

</div>

Hallo,

ich stelle gerade fest, dass der Produkt-Slider, der vom Cross Selling verwendet wird, in der neuen Version (6.4.x) Probleme macht. Vorher konnte der Herstellername dort angezeigt werden, jetzt nicht mehr.  
Ob dynamische Produktgruppe oder nicht ist nach meinen Tests egal.

Weiß jemand, was geändert muss, bzw. was sich seit Shopware 6.4 verändert hat?

Edit: Hier nochmal der Inhalt des Product Slider Resolvers:

```auto
<?php

declare(strict_types=1);

namespace SupplierInfoListing\Resolver;

use Shopware\Core\Content\Cms\Aggregate\CmsSlot\CmsSlotEntity;
use Shopware\Core\Content\Cms\DataResolver\CriteriaCollection;
use Shopware\Core\Content\Cms\DataResolver\ResolverContext\ResolverContext;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Content\Product\ProductDefinition;
use Shopware\Core\Content\Cms\DataResolver\Element\ElementDataCollection;

use Shopware\Core\Content\Product\Cms\ProductSliderCmsElementResolver;

class SupplierInfoListingProductSlider
{
  /** @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('manufacturer');
            $criteria->addAssociation('manufacturer.media');
        }
    }

    return $criteriaCollection;
  }

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

```

LG

---

<div class="post-metadata">

**Author:** ![devnullroot](https://avatars.discourse-cdn.com/v4/letter/d/3bc359/32.png) [@devnullroot](https://forum.shopware.com/u/devnullroot)\
**Post date:** [11. Juli 2021 um 10:04 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/10 "2021-07-11T10:04:54Z")

</div>

Moin @cinquecento,

ohne es getestet zu haben: Ich denke Du brauchst einen `CrossSellingCmsElementResolver` und keinen `ProductSliderCmsElementResolver`.

Beste Grüße,  
devnullroot

---

<div class="post-metadata">

**Author:** ![cinquecento](https://avatars.discourse-cdn.com/v4/letter/c/cc9497/32.png) [@cinquecento](https://forum.shopware.com/u/cinquecento)\
**Post date:** [21. Juli 2021 um 08:41 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/11 "2021-07-21T08:41:47Z")

</div>

Danke für den Hinweis auf den `CrossSellingCmsElementResolver` @devnullroot. Das muss neu sein, wenn ich das richtig sehe (Eintrag im Changelog: [platform/2020-12-10-display-cross-selling-element-on-storefront.md at trunk · shopware/platform · GitHub](https://github.com/shopware/platform/blob/trunk/changelog/release-6-4-0-0/2020-12-10-display-cross-selling-element-on-storefront.md)).

In der Originaldatei `Shopware\Core\Content\Product\Cms\CrossSellingCmsElementResolver` gibt es nun keine collect function.

Hat jemand einen Tipp, wie die collect function hier aussehen müsste?

Grüße!

---

<div class="post-metadata">

**Author:** ![plusgrad](https://avatars.discourse-cdn.com/v4/letter/p/6f9a4e/32.png) [@plusgrad](https://forum.shopware.com/u/plusgrad)\
**Post date:** [29. Juli 2021 um 06:12 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/12 "2021-07-29T06:12:18Z")

</div>

Hallo, ich bin neu in der Welt von Shopware und versuche ein Theme nach Designvorlage umzusetzen. Nun bin ich auf das gleiche Probleme wie oben beschrieben gestoßen. Ich brauch den manufacturer name in eine ProductBox, bzw. zukünftig auch in einem Product Slider. Die ProductBoxResolver Klasse hab ich analog zu hier beschriebenen SliderResolver klasse angelegt.

Wie muss die service.xml aussehen, damit der Service richtig registriert wird?  
Könnte mir jemand auf die Sprünge helfen oder mir einen Tipp geben, wo ich weitere Informationen dazu finde?

Vielen Dank und liebe Grüße!

---

<div class="post-metadata">

**Author:** ![cinquecento](https://avatars.discourse-cdn.com/v4/letter/c/cc9497/32.png) [@cinquecento](https://forum.shopware.com/u/cinquecento)\
**Post date:** [6. August 2021 um 06:16 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/13 "2021-08-06T06:16:52Z")

</div>

Hi @plusgrad,

meine service.xml sieht so aus:

```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="SupplierInfoListing\Subscriber\SupplierInfoListingManufacturerListing">
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService" />
            <argument type="service" id="service_container"/>
            <tag name="kernel.event_subscriber"/>
        </service>
        <service id="SupplierInfoListing\Subscriber\SupplierInfoListingManufacturerSearch">
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService" />
            <argument type="service" id="service_container"/>
            <tag name="kernel.event_subscriber"/>
        </service>
        <service id="SupplierInfoListing\Resolver\SupplierInfoListingProductSlider">
            <tag name="shopware.cms.data_resolver"/>
            <argument type="service" id="Shopware\Core\Content\Product\Cms\ProductSliderCmsElementResolver"/>
        </service>
        <service id="SupplierInfoListing\Resolver\SupplierInfoListingProductBox">
            <tag name="shopware.cms.data_resolver"/>
            <argument type="service" id="Shopware\Core\Content\Product\Cms\ProductBoxCmsElementResolver"/>
        </service>
    </services>
</container>

```

Die service IDs und die classes `SupplierInfoListingProductBox`, `SupplierInfoListingProductSlider`, `SupplierInfoListingManufacturerListing` und `SupplierInfoListingManufacturerSearch` heißen bei dir wahrscheinlich anders, das musst du dann anpassen.

LG

---

<div class="post-metadata">

**Author:** ![SteVO](https://avatars.discourse-cdn.com/v4/letter/s/f05b48/32.png) [@SteVO](https://forum.shopware.com/u/SteVO)\
**Post date:** [16. September 2021 um 13:33 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/14 "2021-09-16T13:33:32Z")

</div>

Hallo!

@cinquecento stehe vor dem gleichen Problem. Hast du hier inzwischen eine Lösung gefunden?

Viele Grüße

---

<div class="post-metadata">

**Author:** ![cinquecento](https://avatars.discourse-cdn.com/v4/letter/c/cc9497/32.png) [@cinquecento](https://forum.shopware.com/u/cinquecento)\
**Post date:** [17. September 2021 um 10:06 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/15 "2021-09-17T10:06:21Z")

</div>

Moin @SteVo,

leider bin ich mit dem `CrossSellingCmsElementResolver` bisher nicht weitergekommen.  
Ich bin noch nicht so firm mit Shopware 6, dass ich das Problem alleine lösen kann.

Vielleicht kann @devnullroot ja helfen?

Liebe Grüße

---

<div class="post-metadata">

**Author:** ![Moorleiche](https://avatars.discourse-cdn.com/v4/letter/m/6f9a4e/32.png) [@Moorleiche](https://forum.shopware.com/u/Moorleiche)\
**Post date:** [17. September 2021 um 10:26 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/16 "2021-09-17T10:26:08Z")

</div>

Wieso gibt es hier kein Criteria-Event?

---

<div class="post-metadata">

**Author:** ![SteVO](https://avatars.discourse-cdn.com/v4/letter/s/f05b48/32.png) [@SteVO](https://forum.shopware.com/u/SteVO)\
**Post date:** [17. September 2021 um 10:27 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/17 "2021-09-17T10:27:35Z")

</div>

Hallo @cinquecento,

habe es nun über einen anderen Weg gelöst.

Hier der Eintrag aus der service.xml:

```auto
<service id="[dein-namespace]\CachedProductCrossSellingRouteExtended" 
                decorates="Shopware\Core\Content\Product\SalesChannel\CrossSelling\CachedProductCrossSellingRoute">
                <argument type="service" id="Shopware\Core\Content\Product\SalesChannel\CrossSelling\CachedProductCrossSellingRoute.inner"/>
                <argument type="service" id="cache.object"/>
                <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Cache\EntityCacheKeyGenerator"/>
                <argument type="service" id="Shopware\Core\Framework\Adapter\Cache\CacheTracer"/>
                <argument type="service" id="event_dispatcher"/>
                <argument>%shopware.cache.invalidation.product_cross_selling_route%</argument>
                <argument type="service" id="logger"/>
        </service>

```

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

namespace [dein-namespace]\Service;

use Shopware\Core\Content\Product\SalesChannel\CrossSelling\CachedProductCrossSellingRoute;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Symfony\Component\HttpFoundation\Request;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
use Shopware\Core\Content\Product\SalesChannel\CrossSelling\ProductCrossSellingRouteResponse;

class CachedProductCrossSellingRouteExtended extends CachedProductCrossSellingRoute
{

	public function load(string $productId, Request $request, SalesChannelContext $context, Criteria $criteria) : ProductCrossSellingRouteResponse
	{

		$criteria->addAssociation('manufacturer');
        $criteria->addAssociation('properties.group');

		return parent::load($productId, $request, $context, $criteria);

	}

}

```

Vielleicht hilft es ja 🙂

Viele Grüße!

---

<div class="post-metadata">

**Author:** ![11shop](https://avatars.discourse-cdn.com/v4/letter/1/90ced4/32.png) [@11shop](https://forum.shopware.com/u/11shop)\
**Post date:** [20. Januar 2022 um 09:05 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/19 "2022-01-20T09:05:02Z")

</div>

ich habe auch Probleme, ich habe alles mögliche ausprobiert aber mein Subscriber befüllt die Daten nicht, ich möchte die Produkt-Slider in Erlebniswelten (mit dynamische Produktgruppen befüllt) erweitern. Der Slider greift ja auf die box-standard und wenn ich da ein dump auf die Produkte mache, dann bekommen ich bei Manufacturer z.B. null.

Meine Subscriber Events die ich bis jetzt ausprobiert habe:

```auto
            ProductEvents::PRODUCT_LOADED_EVENT => "onProductLoaded",
            ProductBoxCmsElementResolver::PRODUCT_LOADED_EVENT => "onProductBoxCmsLoaded",
            ProductSliderCmsElementResolver::PRODUCT_LOADED_EVENT => "onProductSliderCmsLoaded",
            ProductListingCriteriaEvent::PRODUCT_LOADED_EVENT => "onProductListingCriteriaEvent",
            ProductLoaderCriteriaEvent::class => 'productLoaderCriteria',
            'sales_channel.product.loaded' => 'onSalesChannelEntityLoadedEvent'

```

---

<div class="post-metadata">

**Author:** ![anon50212062](https://avatars.discourse-cdn.com/v4/letter/a/d26b3c/32.png) [@anon50212062](https://forum.shopware.com/u/anon50212062)\
**Post date:** [20. Januar 2022 um 19:00 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/20 "2022-01-20T19:00:09Z")

</div>

hey ich kann dir da leider nicht weiterhelfen. aber vielleicht hilft dir das hier, ich konnte mein Problem lösen:

> [@Shopping Experience - Product Box gibt nur ManufacturerId mit](https://forum.shopware.com/t/shopping-experience-product-box-gibt-nur-manufacturerid-mit/92391):
>
> Servus Leute, Ich hab ein Problem mit Shopware, ich verwende die Shopping Experience von Shopware, um die Produkte einfacher auf meiner Shop-Homepage anzuzeigen. Nur ein Problem ist, dass die Product Cards ziemlich dumm ausschauen, weil die manufacturer Namen nicht angezeigt werden. So sollten die Product-Cards ausschauen: [image] Derzeit wird der Name, aber nicht angezeigt… Ich hab schon in anderen Posts gesehen, dass das evtl. mit Resolvern gehen könnte [[siehe hier](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544)]. Ich habe das implemen…

---

<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:** [21. Januar 2022 um 16:27 UTC](https://forum.shopware.com/t/product-properties-in-produkt-slider/69544/21 "2022-01-21T16:27:11Z")

</div>

Ich habe hiermit noch ein generelles Problem… wenn zwei Plugins ihre Associations hinzufügen wollen, überschreibt eines das andere, oder? Beispiel:

1. Plugin holt sich eine Association auf **manufacturer.media** rein:

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

namespace foobar1\Core\Content\Product\Cms;

use Shopware\Core\Content\Cms\Aggregate\CmsSlot\CmsSlotEntity;
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 ManufacturerMediaProductSliderCmsElementResolver
{
    /** @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('manufacturer.media');
            }
        }

        return $criteriaCollection;
    }

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

```

* * *

Das 2. Plugin holt sich eine Association auf **options.group** rein.

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

namespace foobar2\Core\Content\Product\Cms;

use Shopware\Core\Content\Cms\Aggregate\CmsSlot\CmsSlotEntity;
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 OptionsProductSliderCmsElementResolver
{
    /** @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('options.group');
            }
        }

        return $criteriaCollection;
    }

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

```

Im Ergebnis ist dann die Association auf **manufacturer.media** des Plugin 1 futsch… Ist das so, oder mache ich hier einen Fehler?

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