custom/plugins/AcrisCmsPreviewCS/src/Subscriber/SalesChannelEntityLoadedSubscriber.php line 20

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Acris\CmsPreview\Subscriber;
  3. use Acris\CmsPreview\Components\Struct\CmsPreviewPageStruct;
  4. use Shopware\Core\Content\Product\SalesChannel\SalesChannelProductEntity;
  5. use Shopware\Core\System\SalesChannel\Entity\SalesChannelEntityLoadedEvent;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. class SalesChannelEntityLoadedSubscriber implements EventSubscriberInterface
  8. {
  9.     public static function getSubscribedEvents(): array
  10.     {
  11.         return [
  12.             'sales_channel.product.loaded' => 'onSalesChannelProductLoaded',
  13.             'sales_channel.category.loaded' => 'onSalesChannelCategoryLoaded'
  14.         ];
  15.     }
  16.     public function onSalesChannelProductLoaded(SalesChannelEntityLoadedEvent $event): void
  17.     {
  18.         $salesChannelContext $event->getSalesChannelContext();
  19.         if($salesChannelContext->hasExtension(CmsPreviewPageStruct::EXTENSION_CMS_PREVIEW_PAGE) === true && $salesChannelContext->getExtension(CmsPreviewPageStruct::EXTENSION_CMS_PREVIEW_PAGE) instanceof CmsPreviewPageStruct) {
  20.             /** @var CmsPreviewPageStruct $cmsPagePreviewStruct */
  21.             $cmsPagePreviewStruct $salesChannelContext->getExtension(CmsPreviewPageStruct::EXTENSION_CMS_PREVIEW_PAGE);
  22.             $cmsPageId $cmsPagePreviewStruct->getPageId();
  23.             $productId $cmsPagePreviewStruct->getProductId();
  24.             if(!empty($cmsPageId) && !empty($productId)) {
  25.                 /** @var SalesChannelProductEntity $product */
  26.                 foreach ($event->getEntities() as $product) {
  27.                     if($product->getId() === $productId) {
  28.                         $product->setCmsPageId($cmsPageId);
  29.                     }
  30.                 }
  31.             }
  32.         }
  33.     }
  34.     public function onSalesChannelCategoryLoaded(SalesChannelEntityLoadedEvent $event): void
  35.     {
  36.         $salesChannelContext $event->getSalesChannelContext();
  37.         if($salesChannelContext->hasExtension(CmsPreviewPageStruct::EXTENSION_CMS_PREVIEW_PAGE) === true && $salesChannelContext->getExtension(CmsPreviewPageStruct::EXTENSION_CMS_PREVIEW_PAGE) instanceof CmsPreviewPageStruct) {
  38.             /** @var CmsPreviewPageStruct $cmsPagePreviewStruct */
  39.             $cmsPagePreviewStruct $salesChannelContext->getExtension(CmsPreviewPageStruct::EXTENSION_CMS_PREVIEW_PAGE);
  40.             $cmsPageId $cmsPagePreviewStruct->getPageId();
  41.             $categoryId $cmsPagePreviewStruct->getCategoryId();
  42.             if(!empty($cmsPageId) && !empty($categoryId)) {
  43.                 /** @var SalesChannelProductEntity $category */
  44.                 foreach ($event->getEntities() as $category) {
  45.                     if($category->getId() === $categoryId) {
  46.                         $category->setCmsPageId($cmsPageId);
  47.                         $category->setActive(true);
  48.                     }
  49.                 }
  50.             }
  51.         }
  52.     }
  53. }