Magento 2 — Как создать набор атрибутов по умолчанию

В настоящее время у меня есть следующий код, который создает новый набор атрибутов:

use Magento\Framework\ObjectManagerInterface;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\ModuleDataSetupInterface;

class AttributeModel extends \Magento\Framework\Model\AbstractModel
{

const ENTITY_TYPE = \Magento\Catalog\Model\Product::ENTITY;

protected $_objectManager;
protected $_moduleDataSetup;
protected $_eavSetupFactory;

public function __construct(
ObjectManagerInterface $objectManager,
ModuleDataSetupInterface $moduleDataSetup,
EavSetupFactory $eavSetupFactory,
) {

$this->_objectManager = $objectManager;
$this->_moduleDataSetup = $moduleDataSetup;
$this->_eavSetupFactory = $eavSetupFactory;

}

public function createSet($name)
{

$eavSetup = $this->_eavSetupFactory->create([
'setup' => $this->_moduleDataSetup
]);

$eavSetup->addAttributeSet(self::ENTITY_TYPE, $name, 0);

}

}

Однако у набора нет назначенных ему атрибутов. Как мне создать набор на основе набора по умолчанию, чтобы он был предварительно заполнен базовыми атрибутами?

Любая помощь высоко ценится.

3

Решение

Оказывается, модель AttributeSetManagementInterface имеет функцию создания, которая принимает необязательный идентификатор скелета, на котором может основываться новый набор. В итоге я использовал ObjectManager для быстрого исправления, я уверен, что есть лучший способ.

Ниже раскрывается приведенный выше код OP:

public function createSet($name)
{

$eavSetup = $this->_eavSetupFactory->create([
'setup' => $this->_moduleDataSetup
]);

$defaultId = $eavSetup->getDefaultAttributeSetId(self::ENTITY_TYPE);

$model = $this->_objectManager
->create('Magento\Eav\Api\Data\AttributeSetInterface')
->setId(null)
->setEntityTypeId(4)
->setAttributeSetName($name);

$this->_objectManager
->create('Magento\Eav\Api\AttributeSetManagementInterface')
->create(self::ENTITY_TYPE, $model, $defaultId)
->save();

}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]