Event-Subscriber für Merkzettel

Hallo,

ich verwende einen Event-Subscriber (ProductListing) um mir im Listing die Produkt-Eigenschaften zu beschaffen:

public static function getSubscribedEvents()
{
    return [
        ProductListingCriteriaEvent::class => 'handleListingRequest',
    ];
}

public function handleListingRequest(ProductListingCriteriaEvent $event): void
{
    $event->getCriteria()->addAssociation('properties');
    $event->getCriteria()->addAssociation('properties.group');
}

Die Infos benötige ich, um für die Produktbox spezielle Ribbons zu rendern, die von diversen Eigenschaften abhängig sind.

Das Problem: Das Event greift nicht, wenn ich Produkte auf dem Merkzettel habe. Gibt es ein ähnliches Event, welches beim Aufruf der Merkzettel-Funktion anspringt?

1 „Gefällt mir“

Vermutlich wird es folgendes sein: WishListPageProductCriteriaEvent

Danke. Ich steige noch nicht ganz durch, wie ich es korrekt im Theme auffangen muss.

use Shopware\Storefront\Page\Wishlist\WishListPageProductCriteriaEvent;

public static function getSubscribedEvents()
{
    return [
        ProductListingCriteriaEvent::class => 'handleListingRequest',
        WishListPageProductCriteriaEvent::class => 'handleListingRequest'
    ];
}

public function handleListingRequest(ProductListingCriteriaEvent $event): void
{
    $event->getCriteria()->addAssociation('properties');
    $event->getCriteria()->addAssociation('properties.group');
}
1 „Gefällt mir“

Super, vielen Dank. Das funktioniert.

mal noch ne PHP-Frage dazu:

beide Events triggern die Funktion handleListingRequest. Da es aber zwei unterschiedliche Event-Typen sind (ProductListingCriteriaEvent, WishListPageProductCriteriaEvent) brauche ich momentan zwei Funktionen.

Kann man den Übergabeparamter $event so typisieren, dass man mit einer Funktion hinkommt?

Okay, es funktioniert mittels PHP type hints:

use Shopware\Core\Content\Product\Events\ProductListingCriteriaEvent;
use Shopware\Storefront\Page\Wishlist\WishListPageProductCriteriaEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class ListingPropertiesSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return [
            ProductListingCriteriaEvent::class => 'handleListingRequest',
            WishListPageProductCriteriaEvent::class => 'handleListingRequest'
        ];
    }

    public function handleListingRequest($event): void
    {
        $event->getCriteria()->addAssociation('properties');
        $event->getCriteria()->addAssociation('properties.group');
    }
}