vendor/shopware/core/Content/Product/Cms/CrossSellingCmsElementResolver.php line 60

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Content\Product\Cms;
  3. use Shopware\Core\Content\Cms\Aggregate\CmsSlot\CmsSlotEntity;
  4. use Shopware\Core\Content\Cms\DataResolver\Element\ElementDataCollection;
  5. use Shopware\Core\Content\Cms\DataResolver\ResolverContext\EntityResolverContext;
  6. use Shopware\Core\Content\Cms\DataResolver\ResolverContext\ResolverContext;
  7. use Shopware\Core\Content\Cms\SalesChannel\Struct\CrossSellingStruct;
  8. use Shopware\Core\Content\Product\SalesChannel\CrossSelling\AbstractProductCrossSellingRoute;
  9. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  10. use Shopware\Core\Framework\Log\Package;
  11. use Symfony\Component\HttpFoundation\Request;
  12. #[Package('inventory')]
  13. class CrossSellingCmsElementResolver extends AbstractProductDetailCmsElementResolver
  14. {
  15.     private AbstractProductCrossSellingRoute $crossSellingLoader;
  16.     /**
  17.      * @internal
  18.      */
  19.     public function __construct(AbstractProductCrossSellingRoute $crossSellingLoader)
  20.     {
  21.         $this->crossSellingLoader $crossSellingLoader;
  22.     }
  23.     public function getType(): string
  24.     {
  25.         return 'cross-selling';
  26.     }
  27.     public function enrich(CmsSlotEntity $slotResolverContext $resolverContextElementDataCollection $result): void
  28.     {
  29.         $config $slot->getFieldConfig();
  30.         $context $resolverContext->getSalesChannelContext();
  31.         $struct = new CrossSellingStruct();
  32.         $slot->setData($struct);
  33.         $productConfig $config->get('product');
  34.         if ($productConfig === null || $productConfig->getValue() === null) {
  35.             return;
  36.         }
  37.         $product null;
  38.         if ($productConfig->isMapped() && $resolverContext instanceof EntityResolverContext) {
  39.             $product $this->resolveEntityValue($resolverContext->getEntity(), $productConfig->getStringValue());
  40.         }
  41.         if ($productConfig->isStatic()) {
  42.             $product $this->getSlotProduct($slot$result$productConfig->getStringValue());
  43.         }
  44.         if ($product === null) {
  45.             return;
  46.         }
  47.         $crossSellings $this->crossSellingLoader->load($product->getId(), new Request(), $context, new Criteria())->getResult();
  48.         if ($crossSellings->count()) {
  49.             $struct->setCrossSellings($crossSellings);
  50.         }
  51.     }
  52. }