<?php declare(strict_types=1);
namespace fourtwosix\MegaSearchSw\Subscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Shopware\Storefront\Page\Suggest\SuggestPageLoadedEvent;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\ContainsFilter;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
class AfterSearch implements EventSubscriberInterface
{
/** @var EntityRepositoryInterface */
private $categoryRepository;
/** @var EntityRepositoryInterface */
private $supplierRepository;
public function __construct($categoryRepository, $supplierRepository)
{
$this->categoryRepository = $categoryRepository;
$this->supplierRepository = $supplierRepository;
}
public static function getSubscribedEvents(): array
{
return[
SuggestPageLoadedEvent::class => 'onAfterSearch'
];
}
public function onAfterSearch(SuggestPageLoadedEvent $event)
{
$suggestPage = $event->getPage();
$request = $event->getRequest();
$term = $request->get('search');
$criteria = new Criteria();
$criteria->addFilter(new ContainsFilter('name', $term));
$results = $this->categoryRepository->search($criteria, $event->getContext());
$categories = array();
if($results != null){
$cats = $results->getEntities();
foreach($cats as $cat){
$categories[] = array(
'id' => $cat->getId(),
'name' => $cat->getTranslated()['name'],
'entity' => $cat
);
}
}
$results = $this->supplierRepository->search($criteria, $event->getContext());
$suppliers = array();
if($results != null){
$supps = $results->getEntities();
foreach($supps as $supp){
$suppliers[] = array(
'id' => $supp->getId(),
'name' => $supp->getTranslated()['name'],
'entity' => $supp
);
}
}
$extensions = $suggestPage->getExtensions();
$extensions['categories'] = $categories;
$extensions['suppliers'] = $suppliers;
$suggestPage->setExtensions($extensions);
}
}