custom/plugins/XioniXconfig/src/Storefront/Page/Product/Subscriber/ProductPageSubscriber.php line 31

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Xioni\Xconfig\Storefront\Page\Product\Subscriber;
  3. use Shopware\Core\Framework\Struct\ArrayEntity;
  4. use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  9. use Shopware\Core\Framework\Context;
  10. class ProductPageSubscriber implements EventSubscriberInterface
  11. {
  12.     /**
  13.      * @var EntityRepositoryInterface
  14.      */
  15.     private $productRepository;
  16.     
  17.     public function __construct(EntityRepositoryInterface $productRepository)
  18.     {
  19.         $this->productRepository $productRepository;
  20.     }      
  21.     public static function getSubscribedEvents()
  22.     {
  23.         return [
  24.             ProductPageLoadedEvent::class => 'onProductPageLoaded'
  25.         ];
  26.     }
  27.     public function onProductPageLoaded(ProductPageLoadedEvent $event): void
  28.     {
  29.         $page $event->getPage();
  30.         $product $page->getProduct();
  31.         $product_number $product->getProductNumber();
  32.         $x_product $this->getConfigurationProduct($product_number);
  33.         $x_product json_decode($x_producttrue);
  34.         
  35.         $xconfig false;
  36.         if($x_product['data']) {
  37.             $x_variants_accessories $this->getVariantsAccessoriesByProductId($x_product['data']['base']['id']);
  38.             $x_variants_accessories json_decode($x_variants_accessoriestrue);
  39.             $xconfig true;
  40.             $accessory_products = array();
  41.             if (isset($x_product['data']['product_accessories'])) {
  42.                 foreach($x_product['data']['product_accessories'] as $index => $item) {
  43.                     $item $item['product'];
  44.                     $criteria = new Criteria();
  45.                     // var_dump($item);
  46.                     // $criteria->addPostFilter(new EqualsFilter('productNumber', $item['base']['product_number']));             
  47.                     // $newContext = Context::createDefaultContext();
  48.                     // $accessory_products[] = $this->productRepository->search($criteria, $newContext)->getElements();
  49.                 }            
  50.             }
  51.             if (isset($x_variants_accessories['data'])) {
  52.                 foreach($x_variants_accessories['data'] as $index => $item) {
  53.                     $criteria = new Criteria();
  54.                     // var_dump($item);
  55.                     // $criteria->addPostFilter(new EqualsFilter('productNumber', $item['base']['product_number']))->addAssociation('cover');              
  56.                     // $newContext = Context::createDefaultContext();
  57.                     // $accessory_products[] = $this->productRepository->search($criteria, $newContext)->getElements();
  58.                 }            
  59.             }            
  60.             $accessory_products array_filter($accessory_products);
  61.             $page->addExtension('xconfig', new ArrayEntity(['product' => $x_product]));        
  62.             $page->addExtension('xconfig_accessories', new ArrayEntity(['accessories' => $accessory_products]));               
  63.         }
  64.         $page->addExtension('is_xconfig', new ArrayEntity(['has_configuration' => $xconfig])); 
  65.     }
  66.     
  67.     public function getConfigurationProduct($product_number)
  68.     {
  69.         $url        'http://151.252.50.234:8086/api/cim/products/getbyproductnumber/'.$product_number;
  70.         $product  file_get_contents($url);
  71.         
  72.         return $product;
  73.     }
  74.     public function getVariantsAccessoriesByProductId($id)
  75.     {
  76.         $url        'http://151.252.50.234:8086/api/cim/matrix/getaccessoriesbyproduct/'.$id;
  77.         $variants  file_get_contents($url);
  78.         
  79.         return $variants;
  80.     }
  81.     
  82.     public function getProduct($id)
  83.     {
  84.         $url        'http://151.252.50.234:8086/api/pim/article/get/'.$id;
  85.         $product    file_get_contents($url);
  86.         return $product;
  87.     }
  88.     
  89. }