#php #magento #magento2 #magento-1.9
#php #magento #magento2 #magento-1.9
Вопрос:
Пожалуйста, укажите, как добавить несколько атрибутов в один скрипт InstallData
Ответ №1:
Magento 2 использует скрипты данных для добавления атрибутов. В папке Vendor/Module /Setup/Patch /Data добавьте файл .php (например: AddCustomerAttributes)
Следующее добавит несколько атрибутов клиента. После добавления этой команды bin/ magento setup:upgrade требуется.
В patch_list datatable будет добавлена запись, если файл сценария был выполнен правильно, а также, конечно, атрибуты в таблице атрибутов eav.
<?php
namespace VendorModuleSetupPatchData;
use MagentoCustomerModelCustomer;
use MagentoCustomerSetupCustomerSetupFactory;
use MagentoEavModelEntityAttributeSetFactory as AttributeSetFactory;
use MagentoFrameworkSetupModuleDataSetupInterface;
use MagentoFrameworkSetupPatchDataPatchInterface;
class AddCustomerAttributes implements DataPatchInterface
{
/**
* @var ModuleDataSetupInterface
*/
protected $moduleDataSetup;
/**
* @var CustomerSetupFactory
*/
protected $customerSetupFactory;
/**
* @var AttributeSetFactory
*/
protected $attributeSetFactory;
/**
* AddCustomerPhoneNumberAttribute constructor.
* @param ModuleDataSetupInterface $moduleDataSetup
* @param CustomerSetupFactory $customerSetupFactory
* @param AttributeSetFactory $attributeSetFactory
*/
public function __construct(
ModuleDataSetupInterface $moduleDataSetup,
CustomerSetupFactory $customerSetupFactory,
AttributeSetFactory $attributeSetFactory
) {
$this->moduleDataSetup = $moduleDataSetup;
$this->customerSetupFactory = $customerSetupFactory;
$this->attributeSetFactory = $attributeSetFactory;
}
/**
* {@inheritdoc}
*/
public function apply()
{
$customerSetup = $this->customerSetupFactory->create(['setup' => $this->moduleDataSetup]);
$customerEntity = $customerSetup->getEavConfig()->getEntityType(Customer::ENTITY);
$attributeSetId = $customerEntity->getDefaultAttributeSetId();
$attributeSet = $this->attributeSetFactory->create();
$attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);
/** attribute_1 */
$customerSetup->addAttribute(
Customer::ENTITY,
'attribute_1',
[
'type' => 'text',
'label' => 'Attribute One',
'input' => 'text',
'required' => false,
'user_defined' => true,
'sort_order' => 1000,
'position' => 1000,
'default' => 0,
'system' => 0
]
);
$attribute = $customerSetup->getEavConfig()->getAttribute(
Customer::ENTITY,
'attribute_1'
);
$attribute->addData(
[
'attribute_set_id' => $attributeSetId,
'attribute_group_id' => $attributeGroupId,
'used_in_forms' => ['adminhtml_customer']
]
);
$attribute->save();
/** attribute_2 */
$customerSetup->addAttribute(
Customer::ENTITY,
'attribute_2',
[
'type' => 'int',
'label' => 'Attribute Two',
'input' => 'select',
'source' => 'VendorModuleModelOptions',
'required' => false,
'user_defined' => true,
'sort_order' => 1000,
'position' => 1000,
'default' => 0,
'system' => 0
]
);
$attribute = $customerSetup->getEavConfig()->getAttribute(
Customer::ENTITY,
'attribute_2'
);
$attribute->addData(
[
'attribute_set_id' => $attributeSetId,
'attribute_group_id' => $attributeGroupId,
'used_in_forms' => ['adminhtml_customer']
]
);
$attribute->save();
}
/**
* {@inheritdoc}
*/
public static function getDependencies()
{
return [];
}
/**
* {@inheritdoc}
*/
public function getAliases()
{
return [];
}
}
Пожалуйста, дайте мне знать, если вам нужна помощь с чем-либо по этому поводу.
Комментарии:
1. Спасибо за ответ. Позвольте мне проверить и подтвердить, работает ли он нормально или нет 🙂
2. Эй, не могли бы вы сказать мне, что, если это удобный подход для добавления пользовательских атрибутов с использованием исправления данных? Можете ли вы предоставить решение в installdata.php файл?
Ответ №2:
спасибо за вышеупомянутое решение с использованием исправлений. Это работает, и я использовал ту же методологию, используя InstallData/UpgradeData.php в соответствии с моим требованием.
Пожалуйста, проверьте мой ответ, это сохранит данные в базе данных в таблице customer_entity_varchar и атрибуты в eav_attribute. Проверьте код:
<?php
namespace CustomB2BRFQModuleSetup;
use MagentoCustomerModelCustomer;
use MagentoFrameworkSetupModuleContextInterface;
use MagentoFrameworkSetupModuleDataSetupInterface;
use MagentoFrameworkSetupUpgradeDataInterface;
use MagentoCustomerSetupCustomerSetupFactory;
use MagentoEavModelEntityAttributeSetFactory as AttributeSetFactory;
class UpgradeData implements MagentoFrameworkSetupUpgradeDataInterface
{
private $eavSetupFactory;
private $eavConfig;
private $attributeResource;
private $customerSetupFactory;
/**
* @var AttributeSetFactory
*/
protected $attributeSetFactory;
protected $moduleDataSetup;
public function __construct(
MagentoEavSetupEavSetupFactory $eavSetupFactory,
MagentoEavModelConfig $eavConfig,
MagentoCustomerModelResourceModelAttribute $attributeResource,
CustomerSetupFactory $customerSetupFactory,
AttributeSetFactory $attributeSetFactory,
ModuleDataSetupInterface $moduleDataSetup
) {
$this->eavSetupFactory = $eavSetupFactory;
$this->eavConfig = $eavConfig;
$this->attributeResource = $attributeResource;
$this->customerSetupFactory = $customerSetupFactory;
$this->attributeSetFactory = $attributeSetFactory;
$this->moduleDataSetup = $moduleDataSetup;
}
public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
$customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);
//$customerSetup->removeAttribute(Customer::ENTITY, "phonenumber");
$customerEntity = $customerSetup->getEavConfig()->getEntityType(Customer::ENTITY);
$attributeSetId = $customerEntity->getDefaultAttributeSetId();
$attributeSet = $this->attributeSetFactory->create();
$attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);
/** attribute_1 */
$customerSetup->addAttribute(
Customer::ENTITY,
'phonenumber',
[
'type' => 'varchar',
'label' => 'Phone Number',
'input' => 'text',
'required' => true,
'visible' => true,
'user_defined' => true,
'sort_order' => 991,
'position' => 991,
'system' => 0,
]
);
$attribute = $customerSetup->getEavConfig()->getAttribute(
Customer::ENTITY,
'phonenumber'
);
$attribute->addData(
[
'attribute_set_id' => $attributeSetId,
'attribute_group_id' => $attributeGroupId,
'used_in_forms' => ['adminhtml_customer',
'customer_account_create',
'customer_account_edit']
]
);
$attribute->save();
/** attribute_2 */
$customerSetup->addAttribute(
Customer::ENTITY,
'gstnumber',
[
'type' => 'varchar',
'label' => 'GST Number',
'input' => 'text',
'required' => true,
'visible' => true,
'user_defined' => true,
'sort_order' => 992,
'position' => 992,
'system' => 0,
]
);
$attribute = $customerSetup->getEavConfig()->getAttribute(
Customer::ENTITY,
'gstnumber'
);
$attribute->addData(
[
'attribute_set_id' => $attributeSetId,
'attribute_group_id' => $attributeGroupId,
'used_in_forms' => ['adminhtml_customer',
'customer_account_create',
'customer_account_edit']
]
);
$attribute->save();
}
}
?>