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');
}
}