Получить выпадающий список пользовательских атрибутов/метку и значение параметров множественного выбора в Magento 2
Я создал пользовательский атрибут клиента с помощью мультиселекта ввода следующим образом:
$code = 'multiselect_test';
$insertData = array(
"type" => "text",
"backend" => "",
"label" => 'Multiselect Input',
"input" => 'multiselect',
"source" => "",
"visible" => true,
"required" => false,
"default" => "",
"frontend" => "",
"unique" => false,
"note" => ""
);
$values = array('Briteny','James');
$insertData['source'] = 'Magento\Eav\Model\Entity\Attribute\Source\Table';
$insertData['backend'] = 'Magento\Eav\Model\Entity\Attribute\Backend\ArrayBackend';
$insertData['option']['values'] = $values;
$customerSetup->addAttribute(\Magento\Customer\Model\Customer::ENTITY, $code, $insertData);
$attribute = $customerSetup->getAttribute(\Magento\Customer\Model\Customer::ENTITY, $code);
$attribute = $customerSetup->getEavConfig()->getAttribute(\Magento\Customer\Model\Customer::ENTITY, $code);
$used_in_forms[]="adminhtml_customer";
$used_in_forms[]="checkout_register";
$used_in_forms[]="customer_account_edit";
$attribute->setData("used_in_forms", $used_in_forms)
->setData("is_used_for_customer_segment", true)
->setData("is_system", 0)
->setData("is_user_defined", 1)
->setData("sort_order", $data['sorting_order']);
try {
$attribute->save();
} catch (Exception $e) {
$this->_logger->addError($e->getMEssage());
}
Я создал пользовательский ввод для формы регистрации клиентов во внешнем интерфейсе для этого пользовательского атрибута следующим образом:
<select multiple name="multiselect_test">
<option value="0">Britney</option>
<option value="1">James</option>
</select>
Когда я заглянул в серверную часть, чтобы отредактировать информацию о клиенте в информации об учетной записи, значения пользовательского атрибута, введенного из внешнего интерфейса, там не было, я думаю, это потому, что значение этого пользовательского атрибута неверно (не 0 или 1), затем я пытаюсь вставить значение из серверную часть и сохраните ее, а входное значение сохранится должным образом, когда я попытаюсь получить значение следующим образом:
$cattrValue = $customer->getCustomAttribute('multiselect_test')->getValue();
Я получил такой результат:
39,40
В заключение мне нужно знать, как получить реальное значение этого настраиваемого атрибута с несколькими выборками/выпадающим списком и информацию о метке , чтобы я мог использовать его для правильного создания пользовательского атрибута для регистрации клиентов или использовать его для другого процесса в бэкэнде
2 answers
Вы можете использовать интерфейс eav atrribute для получения доступных параметров для вашего выпадающего списка/множественного выбора следующим образом:
public function __construct(
\Magento\Eav\Api\AttributeRepositoryInterface $eavAttributeRepository
) {
$this->eavAttributeRepository = $eavAttributeRepository;
}
public function retrieveOptions($custom_attribute_code){
$attributes = $this->eavAttributeRepository->get(\Magento\Customer\Model\Customer::ENTITY, $custom_attribute_code);
$options = $attributes->getSource()->getAllOptions(false);
}
Используйте приведенный ниже код, чтобы получить и установить значение пользовательского атрибута.
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerObj = $objectManager->create('Magento\Customer\Model\Customer')->getCollection();
foreach ($customerObj as $customerObjdata) {
$customermodel = $objectManager->create('Magento\Customer\Model\Customer');
$customerData = $customermodel->getDataModel();
$customerData->setId($customerObjdata->getData('entity_id'));
$customerData->setCustomAttribute('is_vendor', 0);
$customermodel->updateData($customerData);
$customerResource = $objectManager->create('\Magento\Customer\Model\ResourceModel\CustomerFactory')->create();
$customerResource->saveAttribute($customermodel, 'is_vendor');
}