custom/plugins/SolidProductVideos/src/Storefront/Page/Product/Subscriber/ProductPageLoadedSubscriber.php line 31

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace StudioSolid\ProductVideos\Storefront\Page\Product\Subscriber;
  3. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  4. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  6. use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. class ProductPageLoadedSubscriber implements EventSubscriberInterface
  9. {
  10.     /**
  11.      * @var EntityRepositoryInterface
  12.      */
  13.     private $productEmbeddedVideoMediaRepository;
  14.     public function __construct(
  15.         EntityRepositoryInterface $productEmbeddedVideoMediaRepository
  16.     ) {
  17.         $this->productEmbeddedVideoMediaRepository $productEmbeddedVideoMediaRepository;
  18.     }
  19.     public static function getSubscribedEvents()
  20.     {
  21.         return [
  22.             ProductPageLoadedEvent::class => 'onProductPageLoaded',
  23.         ];
  24.     }
  25.     public function onProductPageLoaded(ProductPageLoadedEvent $event): void
  26.     {
  27.         $product $event->getPage()->getProduct();
  28.         $criteria = new Criteria();
  29.         $criteria->addFilter(new EqualsFilter('productId'$product->getId()));
  30.         $productEmbeddedVideoMediaResults $this->productEmbeddedVideoMediaRepository->search($criteria$event->getContext());
  31.         if (!$productEmbeddedVideoMediaResults->getTotal() && $product->getParentId()) {
  32.             $criteria = new Criteria();
  33.             $criteria->addFilter(new EqualsFilter('productId'$product->getParentId()));
  34.             $productEmbeddedVideoMediaResults $this->productEmbeddedVideoMediaRepository->search($criteria$event->getContext());
  35.         }
  36.         $combinedProductMedia array_merge($productEmbeddedVideoMediaResults->getElements(), $product->getMedia()->getElements());
  37.         usort($combinedProductMedia, function ($a$b) {
  38.             return $a->getPosition() - $b->getPosition();
  39.         });
  40.         $product->addArrayExtension('solidPvCombinedMedia', ['combinedMedia' => $combinedProductMedia]);
  41.     }
  42. }