'Magento 2 Custom Product Type, assosiated/linked Products cant copied by save & duplicate
I have the problem that, when i save & duplicate my custom product type the linked products not be copied and die "old" link_ids in catalog_product_link got new ids for the "old" product.
In my module for the custom product type i added a copyconstructor
class OrderableLink implements \Magento\Catalog\Model\Product\CopyConstructorInterface
{
protected $_logger;
protected ProductLinkInterfaceFactory $productLinkFactory;
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Psr\Log\LoggerInterface $logger,
ProductLinkInterfaceFactory $productLinkFactory,
array $data = []
)
{
$this->_logger = $logger;
$this->productLinkFactory = $productLinkFactory;
}
/**
* Retrieve collection week_product link
*
* @param Product $product
* @return Collection
*/
protected function _getOrderableLinkCollection(Product $product)
{
/** @var Link $links */
$links = $product->getLinkInstance();
$links->setLinkTypeId(OrderableLinkProduct::LINK_TYPE_ORDERABLELINK);
$collection = $links->getLinkCollection();
$collection->setProduct($product);
$collection->addLinkTypeIdFilter();
$collection->addProductIdFilter();
$collection->joinAttributes();
return $collection;
}
/**
* Build product links
*
* @param Product $product
* @param Product $duplicate
* @return void
*/
public function build(Product $product, Product $duplicate)
{
if ($product->getTypeId() !== WeekBundleProductType::TYPE_ID) {
//do nothing if not week_product
return;
}
$data = [];
$attributes = [];
$link = $product->getLinkInstance();
$link->setLinkTypeId(OrderableLinkProduct::LINK_TYPE_ORDERABLELINK);
foreach ($link->getAttributes() as $attribute) {
if (isset($attribute[ 'code' ])) {
$attributes[] = $attribute[ 'code' ];
}
}
/** @var \Magento\Catalog\Model\Product\Link $link */
foreach ($this->_getOrderableLinkCollection($product)
as $link) {
$data[ $link->getLinkedProductId() ] = $link->toArray($attributes);
}
$duplicate->setOrderablelinkLinkData($data);
}
}
like in magento 2 group-product
in my di.xml is the following
<type name="Magento\Catalog\Model\Product\LinkTypeProvider">
<arguments>
<argument name="linkTypes" xsi:type="array">
<item name="orderablelink" xsi:type="const">Gigatec\WeekProduct\Model\Product\OrderableLink::LINK_TYPE_ORDERABLELINK</item>
</argument>
</arguments>
</type>
<type name="Magento\Catalog\Model\ProductLink\CollectionProvider">
<arguments>
<argument name="providers" xsi:type="array">
<item name="orderablelink" xsi:type="object">Gigatec\WeekProduct\Model\ProductLink\CollectionProvider\OrderableLinkProducts</item>
</argument>
</arguments>
</type>
<!-- Plugin to add update argument in collectionProvider -->
<type name="Gigatec\WeekProduct\Model\ProductLink\CollectionProvider\OrderableLinkProducts">
<plugin name="change_orderable_link_before" type="Gigatec\WeekProduct\Plugin\UpdateToOrderableLinkModel"/>
</type>
<type name="Magento\Catalog\Model\Product\Initialization\Helper\ProductLinks">
<plugin name="WeekProduct" type="Gigatec\WeekProduct\Model\Product\Initialization\Helper\ProductLinks\Plugin\Orderable" />
</type>
My Links has the id 7 and code orderablelink.
hope someone of you has a possible solution for my problem
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
