custom/plugins/MaxiaVariantsTable6/src/Storefront/Subscriber/ProductDetailSubscriber.php line 46

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Maxia\MaxiaVariantsTable6\Storefront\Subscriber;
  3. use Maxia\MaxiaVariantsTable6\Core\Content\Product\SalesChannel\Detail\CachedVariantsTableRoute;
  4. use Maxia\MaxiaVariantsTable6\Service\ConfigService;
  5. use Shopware\Storefront\Event\StorefrontRenderEvent;
  6. use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  9. /**
  10.  * @package Maxia\MaxiaVariantsTable6\Subscriber
  11.  */
  12. class ProductDetailSubscriber implements EventSubscriberInterface
  13. {
  14.     public static function getSubscribedEvents(): array
  15.     {
  16.         return [
  17.             StorefrontRenderEvent::class => 'addContextExtension',
  18.             ProductPageLoadedEvent::class => 'onProductPageLoaded'
  19.         ];
  20.     }
  21.     private ConfigService $configService;
  22.     private CachedVariantsTableRoute $variantsTableRoute;
  23.     public function __construct(ConfigService $configServiceCachedVariantsTableRoute $variantsTableRoute)
  24.     {
  25.         $this->configService $configService;
  26.         $this->variantsTableRoute $variantsTableRoute;
  27.     }
  28.     /**
  29.      * @param StorefrontRenderEvent $event
  30.      */
  31.     public function addContextExtension(StorefrontRenderEvent $event)
  32.     {
  33.         $context $event->getSalesChannelContext();
  34.         $context->addExtension('maxiaVariantsTable'$this->configService->getPluginConfig($context));
  35.     }
  36.     /**
  37.      * @param ProductPageLoadedEvent $event
  38.      */
  39.     public function onProductPageLoaded(ProductPageLoadedEvent $event)
  40.     {
  41.         $config $this->configService->getPluginConfig($event->getSalesChannelContext());
  42.         if (!$config->isPluginEnabled()) return;
  43.         $product $event->getPage()->getProduct();
  44.         if (!$product->getParentId()) return;
  45.         try {
  46.             $variantsTableResponse $this->variantsTableRoute
  47.                 ->load($product->getParentId(), $event->getRequest(), $event->getSalesChannelContext());
  48.             if ($variantsTableResponse && $variantsTableResponse->getPagelet()) {
  49.                 $config $variantsTableResponse->getPagelet()->getBootstrapTableConfig();
  50.                 unset($config['data']);
  51.                 $variantsTableResponse->getPagelet()->setBootstrapTableConfig($config);
  52.                 $event->getPage()->addExtension('maxiaVariantsTable'$variantsTableResponse->getPagelet());
  53.             }
  54.         } catch (NotFoundHttpException $e) {}
  55.     }
  56. }