【发布时间】:2017-01-08 12:33:30
【问题描述】:
是否可以在 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 调用正确的类。
【讨论】: