【问题标题】:Programmatically create grouped products in Magento 2在 Magento 2 中以编程方式创建分组产品
【发布时间】:2017-01-08 12:33:30
【问题描述】:

是否可以在 Magento2 中以编程方式创建分组产品? Magento1 有示例,但 Magento2 没有。

你能提供一些例子吗?

【问题讨论】:

    标签: product magento2


    【解决方案1】:

    您可以像任何其他类型的链接一样创建分组的链接。下面的示例显示了注入到类中的产品链接工厂,然后用于创建一组分组的关联链接。正是链接类型“关联”的使用使分组产品与其包含的产品之间的链接关联:

    protected $productLinkFactory;
    
    public function __construct(
        \Magento\Catalog\Model\ProductLink\LinkFactory $productLinkFactory
    ) {
        $this->productLinkFactory = $productLinkFactory;
    }
    
    function addLinksToProduct(array $links, $product) {
        $links = array();
    
        foreach ($linkData as $linkData) {
            $link = $this->productLinkFactory->create()
                ->setSku($linkData['source_sku'])
                ->setLinkedProductSku($linkData['dest_sku'])
                ->setPosition($linkData['position'])
                ->setLinkType('associated');
            $link
                ->getExtensionAttributes()
                ->setQty($linkData['qty']);
            $links[] = $link;
        }
        $product->setProductLinks($links);
    
        $product->save();
    }
    

    【讨论】:

      【解决方案2】:

      我是 Magento 2 的新手,如果我错了,请纠正我。 负责分组产品的文件是 /module-grouped-product/Model/Product/Initialization/Helper/ProductLinks/Plugin/Grouped.php 在 Magento 2 中,我们使用插件来添加相关产品。

      假设你有这样的产品:

      $product->setTypeId('grouped')
      ->setName('My Grouped product')
      ->setSku('my-grouped-sku')
      

      .. .. ..你需要为你的产品设置什么,这类似于制作一个简单的产品。

          $links = $this->getLinksForGrouped($childrenIds,$groupedProductSku);
      
          $product->setProductLinks($links); //This is what you need.
                          $product->save();
      
      
      
          public function getLinksForGrouped($childrenIds,$groupedProductSku){
                  $associated = array();
                  $position = 0;
                  foreach($childrenIds as $productId){
                      $position++;
      //You load each product to get what you need in order to build $productLink
                      $linkedProduct = $this->productRepository->getById($productId);
                      /** @var \Magento\Catalog\Api\Data\ProductLinkInterface $productLink */
                      $productLink = $this->productLinkFactory->create();
      
                      $productLink->setSku($groupedProductSku)
                          ->setLinkType('associated')
                          ->setLinkedProductSku($linkedProduct->getSku())
                          ->setLinkedProductType($linkedProduct->getTypeId())
                          ->setPosition($position)
                          ->getExtensionAttributes()
                          ->setQty(0);
      
                      $associated[] = $productLink;
      
                  }
      
                  return $associated;
      
              }
      

      查看该文件的内部,以便在您的构造函数中为 productLinkFactory、productRepository 调用正确的类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-15
        • 2023-04-04
        • 2014-03-04
        • 1970-01-01
        • 1970-01-01
        • 2012-05-18
        • 1970-01-01
        相关资源
        最近更新 更多