Hi,
Is there a way to define the default attribute set a custom product type should use ?
I created my custom attributes which I made part of a new attribute set, I created my custom Product type and I'd like to have my custom attribute set selected by default when I choose to create a new product of my custom product type.
Or should I use the 'apply_to' field in my InstallData/UpgradeData script, as I do for the general fields:
$fieldList = [ 'price', 'special_from_date', 'special_to_date', 'cost', 'tier_price' ]; $type = \Ltc\ProductVisite\Model\Product\Type\Visite::TYPE_VISITE; foreach ($fieldList as $field) { $applyTo = explode( ',', $eavSetup->getAttribute(\Magento\Catalog\Model\Product::ENTITY, $field, 'apply_to') ); if (!in_array($type, $applyTo)) { $applyTo[] = $type; $eavSetup->updateAttribute( \Magento\Catalog\Model\Product::ENTITY, $field, 'apply_to', implode(',', $applyTo) ); } }
Any idea would help
Thanks
I have the same question.
And I found one solution.
Override the \Magento\Catalog\Block\Adminhtml\Product::_getProductCreateUrl($type) with di.xml. So I used in my modules etc/di.xml:
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <preference for="Magento\Catalog\Block\Adminhtml\Product" type="VendorName\ModuleName\Block\Adminhtml\Product" /> </config>
Then created Block/Adminhtml/Product.php in my module with:
<?php namespace VendorName\ModuelName\Block\Adminhtml; class Product extends \Magento\Catalog\Block\Adminhtml\Product { /** * Retrieve product create url by specified product type * Override parent so we use the attribute set we want for our custom product * @param string $type * @return string */ protected function _getProductCreateUrl($type) { if ($type === \VendorName\ModuleName\Model\Product\Type::TYPE_ID) { $attributeSetId = 10; // TODO get id based on name in db } else { $attributeSetId = $this->_productFactory->create()->getDefaultAttributeSetId(); } return $this->getUrl( 'catalog/*/new', ['set' => $attributeSetId, 'type' => $type] ); } }
Not sure if it's the best solution but it seems the only way to do it right now. Hopefully Magento will get a way to set the default attribute set on a per product type basis in the future.