custom/plugins/TwigelHardTheme/src/Subscriber/ProductPageLoadedSubscriber.php line 34

Open in your IDE?
  1. <?php
  2. namespace TwigelHardTheme\Subscriber;
  3. use Shopware\Core\Framework\DataAbstractionLayer\Entity;
  4. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  7. use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use function Amp\Promise\first;
  10. class ProductPageLoadedSubscriber implements EventSubscriberInterface
  11. {
  12.     /**
  13.      * @var EntityRepositoryInterface
  14.      */
  15.     private EntityRepositoryInterface $productRepository;
  16.     public function __construct($productRepository)
  17.     {
  18.         $this->productRepository $productRepository;
  19.     }
  20.     public static function getSubscribedEvents()
  21.     {
  22.         return [
  23.             ProductPageLoadedEvent::class => 'onProductPageLoaded'
  24.         ];
  25.     }
  26.     public function onProductPageLoaded(ProductPageLoadedEvent $event)
  27.     {
  28.         $pageURL $_SERVER['APP_URL'] . $_SERVER['REQUEST_URI'];
  29.         $productCustomField $event->getPage()->getProduct()->getCustomFields();
  30.         $productId $event->getPage()->getProduct()->getId();
  31.         $event->getPage()->assign(['pageURL' => $pageURL]);
  32.         if (!array_key_exists('twigel_product_link_productsLinks'$productCustomField)) {
  33.             return;
  34.         }
  35.         $productCustomField $productCustomField['twigel_product_link_productsLinks'];
  36.         $products = [];
  37.         foreach ($productCustomField as $key => $value) {
  38.             $criteria = new Criteria();
  39.             $criteria->addFilter(new EqualsFilter('id'$value));
  40.             $criteria->addAssociations(['cover''categories''seoUrls']);
  41.             $product $this->productRepository->search($criteria$event->getContext())->first();
  42.             if ($product) {
  43.                 $customFields $productCustomField;
  44.                 unset($customFields[$key]);
  45.                 $customFields[] = $productId;
  46.                 $newCustomFields['twigel_product_link_productsLinks'] = array_values($customFields);
  47.                 $this->productRepository->update([
  48.                     [
  49.                         'id' => $value,
  50.                         'customFields' => $newCustomFields
  51.                     ]
  52.                 ], $event->getContext());
  53.                 $products[$product->getId()] = $product;
  54.             }
  55.         }
  56.         $event->getPage()->assign(['productLink' => $products]);
  57.     }
  58. }