custom/plugins/TwigelSportBages/src/Subscriber/PageLoaded.php line 55

Open in your IDE?
  1. <?php
  2. namespace Twigel\SportBadges\Subscriber;
  3. use Shopware\Core\Content\Product\ProductEvents;
  4. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityLoadedEvent;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  6. use Shopware\Storefront\Page\GenericPageLoadedEvent;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. class PageLoaded implements EventSubscriberInterface
  9. {
  10.     public $categoryRepository;
  11.     public $badgesRepository;
  12.     public $productRepository;
  13.     public function __construct($categoryRepository$badgesRepository$productRepository)
  14.     {
  15.         $this->categoryRepository $categoryRepository;
  16.         $this->badgesRepository $badgesRepository;
  17.         $this->productRepository $productRepository;
  18.     }
  19.     public static function getSubscribedEvents()
  20.     {
  21.         return [
  22. //            GenericPageLoadedEvent::class => "pageLoaded",
  23.             ProductEvents::PRODUCT_LOADED_EVENT => "pageLoadedProducts" // TODO changed event to PRODUCT_LOADED
  24.         ];
  25.     }
  26.     public function pageLoaded(GenericPageLoadedEvent $event)
  27.     {
  28.         if ($event->getPage()->getHeader()) {
  29.             $categoryId $event->getPage()->getHeader()->getNavigation()->getActive()->getId();
  30.             $criteria = new Criteria([$categoryId]);
  31.             $criteria->addAssociations(['products']);
  32.             $categoryProducts $this->categoryRepository->search($criteria$event->getContext())->first()->getProducts();
  33.             $productsBadgesArray = [];
  34.             foreach ($categoryProducts as $product) {
  35.                 if ($product->getCustomFields() && array_key_exists('twigelBadges'$product->getCustomFields()) && !empty($product->getCustomFields()['twigelBadges'])) {
  36.                     $productBadges $product->getCustomFields()['twigelBadges'];
  37.                     $criteria = new Criteria($productBadges);
  38.                     $badges $this->badgesRepository->search($criteria$event->getContext())->getElements();
  39.                     $productsBadgesArray[$product->getId()] = $badges;
  40.                 }
  41.             }
  42.             $event->getPage()->assign(['productBadges'=>$productsBadgesArray]);
  43.         }
  44.     }
  45.     public function pageLoadedProducts(EntityLoadedEvent $event)
  46.     {
  47.         $products $event->getEntities();
  48.         foreach ($products as $product) {
  49.             if ($product->getCustomFields() && array_key_exists('twigelBadges'$product->getCustomFields()) && !empty($product->getCustomFields()['twigelBadges'])) {
  50.                 $productBadges $product->getCustomFields()['twigelBadges'];
  51.                 $criteria = new Criteria($productBadges);
  52.                 $badges $this->badgesRepository->search($criteria$event->getContext())->getElements();
  53.                 $product->setExtensions(['badge' => $badges]);
  54.             }
  55.         }
  56.     }
  57. }