<?php declare(strict_types=1);
namespace IdeaBooks\Storefront\Subscriber;
use Shopware\Core\Content\Product\Events\ProductListingResultEvent;
use Shopware\Core\Content\Product\Events\ProductListingCriteriaEvent;
use Shopware\Core\Content\Product\SalesChannel\Listing\ProductListingFeaturesSubscriber;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Shopware\Core\System\SystemConfig\SystemConfigService;
class ProductListingResultSubscriber implements EventSubscriberInterface
{
/**
* @var SystemConfigService
*/
private SystemConfigService $systemConfigService;
public function __construct(
SystemConfigService $systemConfigService
) {
$this->systemConfigService = $systemConfigService;
}
/**
* @inheritDoc
*/
public static function getSubscribedEvents()
{
return [
ProductListingCriteriaEvent::class => 'handleRequest',
ProductListingResultEvent::class => 'handleResult'
];
}
/**
* @param ProductListingResultEvent $event
*/
public function handleResult(ProductListingResultEvent $event): void
{
$request = $event->getRequest();
$defaultSortOrder = $this->systemConfigService->get('IdeaBooks.config.defaultSortOrder') ?? ProductListingFeaturesSubscriber::DEFAULT_SORT;
//dump($defaultSortOrder);
//dump($request->get('order'));
/* Sorting is not selected in frontend */
/* Albert: er komt altijd een default sorting 'date' mee, dus andere if om die te overrulen */
if ($request->get('order') == 'date') {
//if (!$request->get('order')) {
$event->getResult()->setSorting($defaultSortOrder);
}
//dump($event->getResult());
}
/**
* @param ProductListingCriteriaEvent $event
*/
public function handleRequest(ProductListingCriteriaEvent $event): void
{
$request = $event->getRequest();
$criteria = $event->getCriteria();
//dump($request->get('order'));
/* Sorting is not selected in frontend */
/* Albert: er komt altijd een default sorting 'date' mee, dus andere if om die te overrulen */
if ($request->get('order') == 'date') {
//if (!$request->get('order')) {
$criteria->resetSorting();
$criteria->addSorting(
new FieldSorting('releaseDate', 'DESC')
);
}
}
}