<?php declare(strict_types=1);
namespace FourtwosixThemeCustomization\Subscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Content\Product\ProductDefinition;
use Shopware\Core\System\SystemConfig\SystemConfigService;
use Swag\CmsExtensions\Service\Content\Cms\SalesChannel\SalesChannelCmsPageLoaderBlockRuleDecorator as SalesChannelCmsPageLoader;
use Shopware\Core\Content\Product\ProductEvents;
use Symfony\Component\HttpFoundation\RequestStack;
class ProductDetailTemplateSubscriber implements EventSubscriberInterface
{
/** @var SystemConfigService $systemConfigService */
private SystemConfigService $systemConfigService;
/** @var RequestStack $requestStack */
private RequestStack $requestStack;
public function __construct(SystemConfigService $systemConfigService, RequestStack $requestStack)
{
$this->systemConfigService = $systemConfigService;
$this->requestStack = $requestStack;
}
public static function getSubscribedEvents(): array
{
return [
'sales_channel.' . ProductEvents::PRODUCT_LOADED_EVENT => 'onProductDataLoaded',
];
}
public function onProductDataLoaded($event) {
$request = $this->requestStack->getCurrentRequest();
if(!empty($request) && $request->get("_route") == "frontend.detail.page") {
$products = $event->getEntities();
if(count($products) == 1) {
$salesChannelId = $event->getSalesChannelContext()->getSalesChannelId();
$newDefaultCmsPage = $this->systemConfigService->get('FourtwosixThemeCustomization.config.standardProductDetail', $salesChannelId);
if(!empty($newDefaultCmsPage)) {
$products[0]->setCmsPageId($newDefaultCmsPage);
}
}
}
}
}