custom/plugins/fourtwosixMegaSearchSw/src/Subscriber/AfterSearch.php line 34

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace fourtwosix\MegaSearchSw\Subscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Shopware\Storefront\Page\Suggest\SuggestPageLoadedEvent;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\ContainsFilter;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  8. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  9. class AfterSearch implements EventSubscriberInterface
  10. {
  11.     /** @var EntityRepositoryInterface */
  12.     private $categoryRepository;
  13.     
  14.     /** @var EntityRepositoryInterface */
  15.     private $supplierRepository;
  16.     public function __construct($categoryRepository$supplierRepository)
  17.     {
  18.         $this->categoryRepository $categoryRepository;
  19.         $this->supplierRepository $supplierRepository;
  20.     }
  21.     
  22.     
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return[
  26.             SuggestPageLoadedEvent::class => 'onAfterSearch'
  27.         ];
  28.     }
  29.     public function onAfterSearch(SuggestPageLoadedEvent $event)
  30.     {
  31.         $suggestPage $event->getPage();
  32.         
  33.         $request $event->getRequest();
  34.         
  35.         $term $request->get('search');
  36.         
  37.         $criteria = new Criteria();
  38.         $criteria->addFilter(new ContainsFilter('name'$term));
  39.         $results $this->categoryRepository->search($criteria$event->getContext());
  40.         
  41.         $categories = array();
  42.         if($results != null){
  43.             $cats $results->getEntities();
  44.             foreach($cats as $cat){
  45.                 $categories[] = array(
  46.                     'id' => $cat->getId(),
  47.                     'name' => $cat->getTranslated()['name'],
  48.                     'entity' => $cat
  49.                 );
  50.             }
  51.         }
  52.         
  53.         $results $this->supplierRepository->search($criteria$event->getContext());
  54.         
  55.         $suppliers = array();
  56.         if($results != null){
  57.             $supps $results->getEntities();
  58.             foreach($supps as $supp){
  59.                 $suppliers[] = array(
  60.                     'id' => $supp->getId(),
  61.                     'name' => $supp->getTranslated()['name'],
  62.                     'entity' => $supp
  63.                 );
  64.             }
  65.         }
  66.         
  67.         $extensions $suggestPage->getExtensions();
  68.         $extensions['categories'] = $categories;
  69.         $extensions['suppliers'] = $suppliers;
  70.         $suggestPage->setExtensions($extensions);
  71.         
  72.     }
  73. }