<?php declare(strict_types=1);
namespace Cbax\ModulPreviewImageSlider\Subscriber;
use Shopware\Core\Content\Product\Events\ProductListingCriteriaEvent;
use Shopware\Core\Content\Product\Events\ProductSearchCriteriaEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Shopware\Core\System\SystemConfig\SystemConfigService;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;
class FrontendSubscriber implements EventSubscriberInterface
{
const MODUL_NAME = 'CbaxModulPreviewImageSlider';
/**
* @var SystemConfigService
*/
private $systemConfigService;
public function __construct(SystemConfigService $systemConfigService)
{
$this->systemConfigService = $systemConfigService;
}
public static function getSubscribedEvents(): array
{
return [
ProductListingCriteriaEvent::class => 'handleListingRequest',
ProductSearchCriteriaEvent::class => 'handleSearchRequest'
];
}
public function handleListingRequest(ProductListingCriteriaEvent $event)
{
$salesChannelId = $event->getSalesChannelContext()->getSalesChannelId();
$config = $this->systemConfigService->get(self::MODUL_NAME, $salesChannelId)['config'];
if (empty($config['cbaxPreviewImageSliderActive'])) return;
$maxPictureNumber = !empty($config['cbaxPreviewImageSliderMaxImages']) ? (int)$config['cbaxPreviewImageSliderMaxImages'] : 0;
$criteria = $event->getCriteria();
$criteria->addAssociation('media');
$criteria->getAssociation('media')->addSorting(new FieldSorting('position', FieldSorting::ASCENDING));
if ($maxPictureNumber > 0)
{
$criteria->getAssociation('media')->setLimit($maxPictureNumber);
}
}
public function handleSearchRequest(ProductSearchCriteriaEvent $event)
{
$salesChannelId = $event->getSalesChannelContext()->getSalesChannelId();
$config = $this->systemConfigService->get(self::MODUL_NAME, $salesChannelId)['config'];
if (empty($config['cbaxPreviewImageSliderActive'])) return;
$maxPictureNumber = !empty($config['cbaxPreviewImageSliderMaxImages']) ? (int)$config['cbaxPreviewImageSliderMaxImages'] : 0;
$criteria = $event->getCriteria();
$criteria->addAssociation('media');
$criteria->getAssociation('media')->addSorting(new FieldSorting('position', FieldSorting::ASCENDING));
if ($maxPictureNumber > 0)
{
$criteria->getAssociation('media')->setLimit($maxPictureNumber);
}
}
}