custom/plugins/ShopStudioPixelYourShop/src/EventSubscriber/ProductCriteriaEventSubscriber.php line 47

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace ShopStudio\PixelYourShop\EventSubscriber;
  3. use Shopware\Core\Content\Product\Events\ProductListingCriteriaEvent;
  4. use Shopware\Core\Content\Product\Events\ProductSearchCriteriaEvent;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Exception\InconsistentCriteriaIdsException;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  7. use Shopware\Storefront\Page\Product\ProductPageCriteriaEvent;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. /**
  10.  * @since 2.0.0
  11.  */
  12. class ProductCriteriaEventSubscriber implements EventSubscriberInterface
  13. {
  14.     /**
  15.      * @since 2.0.0
  16.      *
  17.      * @inheritDoc
  18.      */
  19.     public static function getSubscribedEvents(): array
  20.     {
  21.         return [
  22.             ProductListingCriteriaEvent::class => 'onProductListingCriteria',
  23.             ProductSearchCriteriaEvent::class => 'onProductSearchCriteria',
  24.             ProductPageCriteriaEvent::class => 'onProductPageCriteria',
  25.         ];
  26.     }
  27.     /**
  28.      * @since 2.0.0
  29.      *
  30.      * @throws InconsistentCriteriaIdsException
  31.      */
  32.     public function onProductListingCriteria(ProductListingCriteriaEvent $event): void
  33.     {
  34.         $criteria $event->getCriteria();
  35.         $this->extendCriteria($criteria);
  36.     }
  37.     /**
  38.      * @since 2.0.0
  39.      *
  40.      * @throws InconsistentCriteriaIdsException
  41.      */
  42.     public function onProductSearchCriteria(ProductSearchCriteriaEvent $event): void
  43.     {
  44.         $criteria $event->getCriteria();
  45.         $this->extendCriteria($criteria);
  46.     }
  47.     /**
  48.      * @since 2.0.0
  49.      *
  50.      * @throws InconsistentCriteriaIdsException
  51.      */
  52.     public function onProductPageCriteria(ProductPageCriteriaEvent $event): void
  53.     {
  54.         $criteria $event->getCriteria();
  55.         $this->extendCriteria($criteria);
  56.     }
  57.     /**
  58.      * @since 2.0.0
  59.      */
  60.     private function extendCriteria(Criteria $criteria): void
  61.     {
  62.         if (!$criteria->hasAssociation('options')) {
  63.             $criteria->addAssociation('options');
  64.         }
  65.         if (!$criteria->hasAssociation('categories')) {
  66.             $criteria->addAssociation('categories');
  67.         }
  68.         if (!$criteria->hasAssociation('mainCategories')) {
  69.             $criteria->addAssociation('mainCategories');
  70.         }
  71.         if (!$criteria->hasAssociation('mainCategories.category')) {
  72.             $criteria->addAssociation('mainCategories.category');
  73.         }
  74.         if (!$criteria->hasAssociation('manufacturer')) {
  75.             $criteria->addAssociation('manufacturer');
  76.         }
  77.     }
  78. }