Программное создание сгруппированных продуктов в Magento 2

Можно ли программно создавать сгруппированные продукты в Magento2? Есть примеры для Magento1, но не для Magento2.

Не могли бы вы привести несколько примеров?


person 0xhiryuu    schedule 31.08.2016    source источник


Ответы (2)


Вы можете создавать ссылки, сгруппированные, как и любые другие ссылки. В приведенном ниже примере показана фабрика ссылок на продукты, внедренная в класс и затем используемая для создания набора сгруппированных ассоциативных ссылок. Именно использование типа ссылки «связанный» создает связи между сгруппированным продуктом и содержащимися в нем продуктами:

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();
}
person Robert Egginton    schedule 10.11.2016

Я новичок в 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.

person vbak    schedule 24.02.2017