Можно ли программно создавать сгруппированные продукты в Magento2? Есть примеры для Magento1, но не для Magento2.
Не могли бы вы привести несколько примеров?
Можно ли программно создавать сгруппированные продукты в Magento2? Есть примеры для Magento1, но не для Magento2.
Не могли бы вы привести несколько примеров?
Вы можете создавать ссылки, сгруппированные, как и любые другие ссылки. В приведенном ниже примере показана фабрика ссылок на продукты, внедренная в класс и затем используемая для создания набора сгруппированных ассоциативных ссылок. Именно использование типа ссылки «связанный» создает связи между сгруппированным продуктом и содержащимися в нем продуктами:
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();
}
Я новичок в 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.