custom/plugins/IdeaBooks/src/Storefront/Subscriber/ProductListingResultSubscriber.php line 39

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace IdeaBooks\Storefront\Subscriber;
  3. use Shopware\Core\Content\Product\Events\ProductListingResultEvent;
  4. use Shopware\Core\Content\Product\Events\ProductListingCriteriaEvent;
  5. use Shopware\Core\Content\Product\SalesChannel\Listing\ProductListingFeaturesSubscriber;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Shopware\Core\System\SystemConfig\SystemConfigService;
  9. class ProductListingResultSubscriber implements EventSubscriberInterface
  10. {
  11.     /**
  12.      * @var SystemConfigService
  13.      */
  14.     private SystemConfigService $systemConfigService;
  15.     public function __construct(
  16.         SystemConfigService $systemConfigService
  17.     ) {
  18.         $this->systemConfigService $systemConfigService;
  19.     }
  20.     /**
  21.      * @inheritDoc
  22.      */
  23.     public static function getSubscribedEvents()
  24.     {
  25.         return [
  26.             ProductListingCriteriaEvent::class  => 'handleRequest',
  27.             ProductListingResultEvent::class    => 'handleResult'
  28.         ];
  29.     }
  30.     /**
  31.      * @param ProductListingResultEvent $event
  32.      */
  33.     public function handleResult(ProductListingResultEvent $event): void
  34.     {
  35.         $request $event->getRequest();
  36.         $defaultSortOrder $this->systemConfigService->get('IdeaBooks.config.defaultSortOrder') ?? ProductListingFeaturesSubscriber::DEFAULT_SORT;
  37.         //dump($defaultSortOrder);
  38.         //dump($request->get('order'));
  39.         /* Sorting is not selected in frontend */
  40.         /* Albert: er komt altijd een default sorting 'date' mee, dus andere if om die te overrulen */
  41.         if ($request->get('order') == 'date') {
  42.         //if (!$request->get('order')) {
  43.             $event->getResult()->setSorting($defaultSortOrder);
  44.         }
  45.         //dump($event->getResult());
  46.     }
  47.     /**
  48.      * @param ProductListingCriteriaEvent $event
  49.      */
  50.     public function handleRequest(ProductListingCriteriaEvent $event): void
  51.     {
  52.         $request $event->getRequest();
  53.         $criteria $event->getCriteria();
  54.         //dump($request->get('order'));
  55.         /* Sorting is not selected in frontend */
  56.         /* Albert: er komt altijd een default sorting 'date' mee, dus andere if om die te overrulen */
  57.         if ($request->get('order') == 'date') {
  58.         //if (!$request->get('order')) {
  59.             $criteria->resetSorting();
  60.             $criteria->addSorting(
  61.                 new FieldSorting('releaseDate''DESC')
  62.             );
  63.         }
  64.     }
  65. }