Получить выпадающий список пользовательских атрибутов/метку и значение параметров множественного выбора в 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

В заключение мне нужно знать, как получить реальное значение этого настраиваемого атрибута с несколькими выборками/выпадающим списком и информацию о метке , чтобы я мог использовать его для правильного создания пользовательского атрибута для регистрации клиентов или использовать его для другого процесса в бэкэнде

Author: simple guy, 2017-07-06

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);
}
 3
Author: Idham Choudry, 2017-07-06 08:43:23

Используйте приведенный ниже код, чтобы получить и установить значение пользовательского атрибута.

$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');
    }
 -1
Author: Abhinav Singh, 2017-07-06 07:20:05