custom/plugins/EsmCmsExtensions/src/Storefront/Subscriber/OfferSubscriber.php line 56

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace EsmCmsExtensions\Storefront\Subscriber;
  4. use Shopware\Core\Content\Product\Events\ProductListingResultEvent;
  5. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  8. use Shopware\Storefront\Page\Navigation\NavigationPageLoadedEvent;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. class OfferSubscriber implements EventSubscriberInterface
  11. {
  12.     protected EntityRepository $offerRepository;
  13.     public function __construct(EntityRepository $offerRepository)
  14.     {
  15.         $this->offerRepository $offerRepository;
  16.     }
  17.     public static function getSubscribedEvents(): array
  18.     {
  19.         return [
  20.             ProductListingResultEvent::class => 'onProductListingResult',
  21.             NavigationPageLoadedEvent::class => 'onNavigationPageLoaded',
  22.         ];
  23.     }
  24.     public function onProductListingResult(ProductListingResultEvent $event): void
  25.     {
  26.         $categoryId $event->getRequest()->get('navigationId');
  27.         if(!$categoryId) {
  28.             return;
  29.         }
  30.         $criteria = new Criteria();
  31.         $criteria->addFilter(new EqualsFilter('categories.id'$categoryId));
  32.         $offer $this->offerRepository->search($criteria$event->getContext())->first();
  33.         $event->getResult()->addExtension('offer'$offer);
  34.     }
  35.     public function onNavigationPageLoaded(NavigationPageLoadedEvent $event): void
  36.     {
  37.         $navigationId $event->getRequest()->attributes->get('navigationId');
  38.         if(!$navigationId) {
  39.             return;
  40.         }
  41.         $criteria = new Criteria();
  42.         $criteria->addFilter(new EqualsFilter('categories.id'$navigationId));
  43.         $offer $this->offerRepository->search($criteria$event->getContext())->first();
  44.         $event->getPage()->addExtension('offer'$offer);
  45.     }
  46. }