custom/plugins/NenoHeroSlider/src/Storefront/Subscriber/NavigationPageLoadedSubscriber.php line 37

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Neno\HeroSlider\Storefront\Subscriber;
  3. use Neno\HeroSlider\Core\Content\Slide\SlideEntity;
  4. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;
  8. use Shopware\Storefront\Page\Navigation\NavigationPageLoadedEvent;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. class NavigationPageLoadedSubscriber implements EventSubscriberInterface
  11. {
  12.     /**
  13.      * @var EntityRepositoryInterface
  14.      */
  15.     private $slideRepository;
  16.     public function __construct(EntityRepositoryInterface $slideRepository)
  17.     {
  18.         $this->slideRepository $slideRepository;
  19.     }
  20.     /**
  21.      * @inheritDoc
  22.      */
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return [
  26.             NavigationPageLoadedEvent::class => 'addHeroSliderData',
  27.         ];
  28.     }
  29.     public function addHeroSliderData(NavigationPageLoadedEvent $event): void
  30.     {
  31.         $request $event->getRequest();
  32.         $context $event->getSalesChannelContext();
  33.         $categoryId $request->get('navigationId'$context->getSalesChannel()->getNavigationCategoryId());
  34.         if (!$categoryId) {
  35.             return;
  36.         }
  37.         $criteria = (new Criteria())
  38.             ->addAssociation('categories')
  39.             ->addAssociation('salesChannels')
  40.             ->addFilter(new EqualsFilter('categories.id'$categoryId))
  41.             ->addSorting(new FieldSorting('priority'));
  42.         $slides $this->slideRepository
  43.             ->search($criteria$event->getContext())
  44.             ->getEntities();
  45.         $slides $slides->filter(function(SlideEntity $slide) use ($context) {
  46.             return (
  47.                 !$slide->getSalesChannels() ||
  48.                 $slide->getSalesChannels()->count() == ||
  49.                 $slide->getSalesChannels()->has($context->getSalesChannelId())
  50.             );
  51.         });
  52.         $event->getPage()->addExtension('hero_slider_slides'$slides);
  53.     }
  54. }