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

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. /**
  9.  * @package Maxia\MaxiaVariantsTable6\Subscriber
  10.  */
  11. class ProductDetailSubscriber implements EventSubscriberInterface
  12. {
  13.     public static function getSubscribedEvents(): array
  14.     {
  15.         return [
  16.             StorefrontRenderEvent::class => 'addContextExtension',
  17.             ProductPageLoadedEvent::class => 'onProductPageLoaded'
  18.         ];
  19.     }
  20.     private ConfigService $configService;
  21.     private CachedVariantsTableRoute $variantsTableRoute;
  22.     public function __construct(ConfigService $configServiceCachedVariantsTableRoute $variantsTableRoute)
  23.     {
  24.         $this->configService $configService;
  25.         $this->variantsTableRoute $variantsTableRoute;
  26.     }
  27.     /**
  28.      * @param StorefrontRenderEvent $event
  29.      */
  30.     public function addContextExtension(StorefrontRenderEvent $event)
  31.     {
  32.         $context $event->getSalesChannelContext();
  33.         $context->addExtension('maxiaVariantsTable'$this->configService->getPluginConfig($context));
  34.     }
  35.     /**
  36.      * @param ProductPageLoadedEvent $event
  37.      */
  38.     public function onProductPageLoaded(ProductPageLoadedEvent $event)
  39.     {
  40.         $config $this->configService->getPluginConfig($event->getSalesChannelContext());
  41.         if (!$config->isPluginEnabled()) return;
  42.         $product $event->getPage()->getProduct();
  43.         if (!$product->getParentId()) return;
  44.         $customFields $product->getTranslation('customFields');
  45.         $showByDefault $config->getDisplayMode() === 'show_all';
  46.         $showTable $customFields['maxia_variants_table_active'] ?? $showByDefault;
  47.         if ($showTable) {
  48.             $variantsTableResponse $this->variantsTableRoute
  49.                 ->load($product->getParentId() ?? $product->getId(), $event->getRequest(), $event->getSalesChannelContext());
  50.             if ($variantsTableResponse && $variantsTableResponse->getPagelet()) {
  51.                 $config $variantsTableResponse->getPagelet()->getBootstrapTableConfig();
  52.                 unset($config['data']);
  53.                 $variantsTableResponse->getPagelet()->setBootstrapTableConfig($config);
  54.                 $event->getPage()->addExtension('maxiaVariantsTable'$variantsTableResponse->getPagelet());
  55.             }
  56.         }
  57.     }
  58. }