# Geeignetes Event für das Kategorie Listing?

**URL:** <https://forum.shopware.com/t/geeignetes-event-fuer-das-kategorie-listing/103232>\
**Category:** Shopware 6 (German)\
**Created:** [6. März 2024 um 12:09 UTC](https://forum.shopware.com/t/geeignetes-event-fuer-das-kategorie-listing/103232 "2024-03-06T12:09:29Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [6. März 2024 um 12:09 UTC](https://forum.shopware.com/t/geeignetes-event-fuer-das-kategorie-listing/103232/1 "2024-03-06T12:09:29Z")

</div>

Irgendwie komme ich aktuell nciht so recht weiter. Im Kategorie Listing sollen noch zusätzliche Informationen über das Listing der Produkte gestellt werden. Jetzt verzweifel ich schon bei der Suche nach dem richtigen Event welches hier zusändig ist.

Bei „ProductListingResultEvent“ und „ProductListingCriteriaEvent“ bezieht sich das wohl nur auf die Produkte, jedoch nicht auf die Seite allgemein. Hier wäre die erste Frage, welches Event besser wäre?

Zweite Frage, wie ich eigene Variablen (im Subscriber irgendwie definiert) dann im Frontend Twig zugreiffen kann. Wie übergebe ich neue Variablen?

Vielleicht hat ja jemand einen Ansatzpunkt 🙂

---

<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:** [6. März 2024 um 13:17 UTC](https://forum.shopware.com/t/geeignetes-event-fuer-das-kategorie-listing/103232/2 "2024-03-06T13:17:37Z")

</div>

Mit den PageLoader-Events bist du dann wohl besser dran.

> **[Add Data to Storefront Page | Shopware Documentation](https://developer.shopware.com/docs/guides/plugins/plugins/storefront/add-data-to-storefront-page.html)**
>
> Documentation for Shopware developers

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [6. März 2024 um 13:55 UTC](https://forum.shopware.com/t/geeignetes-event-fuer-das-kategorie-listing/103232/3 "2024-03-06T13:55:00Z")

</div>

Ja habe dann doch über ProductListingResultEvent das gebaut. FooterPageletLoadedEvent wird immer geladen, was jedoch nicht nötig ist.

---

<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:** [6. März 2024 um 14:02 UTC](https://forum.shopware.com/t/geeignetes-event-fuer-das-kategorie-listing/103232/4 "2024-03-06T14:02:35Z")

</div>

Globale Events:  
‚sales\_channel.product.process.criteria‘  
‚sales\_channel.product.loaded‘

Wahrscheinlich nicht die Lösung, aber wollte es nur mal erwähnt haben 😃

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [6. März 2024 um 14:05 UTC](https://forum.shopware.com/t/geeignetes-event-fuer-das-kategorie-listing/103232/5 "2024-03-06T14:05:20Z")

</div>

> [@Moorleiche](#):
>
> Globale Events:

Mir reicht nur ein Event für das Listing, Global brauch ich nix 🙂

---

<div class="post-metadata">

**Author:** ![olli.k](https://avatars.discourse-cdn.com/v4/letter/o/e99b99/32.png) [@olli.k](https://forum.shopware.com/u/olli.k)\
**Post date:** [6. März 2024 um 19:56 UTC](https://forum.shopware.com/t/geeignetes-event-fuer-das-kategorie-listing/103232/6 "2024-03-06T19:56:17Z")

</div>

Das ProductListing ist doch ein CmsElement…  
Was wenn du den bestehenden ProductListingCmsElementResolver „dekorieren“ würdest? Das könnte durch einen Decorator ungefähr so aussehen (ist nur Beispiel Code der nicht zu 100% getestet ist):

```auto
namespace DeinPlugin\Decorator;

use Shopware\Core\Content\Cms\Aggregate\CmsSlot\CmsSlotEntity;
use Shopware\Core\Content\Cms\DataResolver\CriteriaCollection;
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\Framework\Struct\ArrayStruct;

class ProductListingCmsElementResolver implements CmsElementResolverInterface
{

    public function __construct(private readonly CmsElementResolverInterface $originalResolver)
    {
    }

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

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

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

        $arrayStruct = new ArrayStruct();
        $arrayStruct->set('error', ['Tschüs Welt']);
        $arrayStruct->set('success', ['Hallo Welt']);

        $slot->addExtension('messages', $arrayStruct);
    }
}

```

dann kannst du im Twig das Twig File  
`DeinPlugin/src/Resources/views/storefront/component/product/listing.html.twig`  
überschreiben:

```auto
{% sw_extends '@Storefront/storefront/component/product/listing.html.twig' %}

{% block product_listing %}
    {% set errorMessages = element.extensions.messages.error %}
    {% set successMessages = element.extensions.messages.success %}

    {% if errorMessages and errorMessages | length > 0 %}
        {% for message in errorMessages %}
            <div role="alert" class="alert alert-danger">
                <div class="alert-content-container">
                    <div class="alert-content"> {{ message }}</div>
                </div>
            </div>
        {% endfor %}
    {% endif %}

    {% if successMessages and successMessages | length > 0 %}
        {% for message in successMessages %}
            <div role="alert" class="alert alert-success">
                <div class="alert-content-container">
                    <div class="alert-content"> {{ message }}</div>
                </div>
            </div>
        {% endfor %}
    {% endif %}

    {{ parent() }}
{% endblock %}

```

drauf zugreifen.

In der services.xml müsste das dann so in etwa aussehen:

```auto
        <service
                id="DeinPlugin\Decorator\ProductListingCmsElementResolver"
                class="DeinPlugin\Decorator\ProductListingCmsElementResolver"
                decorates="Shopware\Core\Content\Product\Cms\ProductListingCmsElementResolver"
        >
            <argument type="service" id="DeinPlugin\Decorator\ProductListingCmsElementResolver.inner"/>
        </service>

```

Ist nur eine Idee!

> **[Add Data to CMS Element | Shopware Documentation](https://developer.shopware.com/docs/guides/plugins/plugins/content/cms/add-data-to-cms-elements.html)**
>
> Documentation for Shopware developers

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [7. März 2024 um 07:04 UTC](https://forum.shopware.com/t/geeignetes-event-fuer-das-kategorie-listing/103232/7 "2024-03-07T07:04:05Z")

</div>

> [@olli.k](#):
>
> Ist nur eine Idee!

Erst mal Danke für die Indee. Werde ich mal so im Hinterkopf behalten. Ich habe jetzt mein Vorhaben doch über ProductListingResultEvent gelöst. Und meine zusätzlichen Variablen übergeben ich mittels Context und Extension. Alles klappt wie gedacht 🙂

---

<div class="post-metadata">

**Author:** ![olli.k](https://avatars.discourse-cdn.com/v4/letter/o/e99b99/32.png) [@olli.k](https://forum.shopware.com/u/olli.k)\
**Post date:** [7. März 2024 um 11:44 UTC](https://forum.shopware.com/t/geeignetes-event-fuer-das-kategorie-listing/103232/8 "2024-03-07T11:44:55Z")

</div>

Super, wenn es klappt. 👍 Gibt bekanntlich immer mehrere Wege zum Ziel 🙂

---

<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:** [8. März 2024 um 10:23 UTC](https://forum.shopware.com/t/geeignetes-event-fuer-das-kategorie-listing/103232/9 "2024-03-08T10:23:30Z")

</div>

> [@R4M](#):
>
> FooterPageletLoadedEvent wird immer geladen

Es ist durchaus möglich per if das Event abzufragen und nur dann zu reagieren, wenn der richtige PageLoader melden wurde.
