Как показать / сохранить значение пользовательского атрибута адреса клиента при редактировании адреса Magento 2 - PullRequest
1 голос
/ 08 мая 2019

Я хочу добавить пользовательский атрибут на customer_address.Мне нужно сохранить значение в БД, вызвать его в формах внешнего интерфейса (новый / изменить адрес), а также в бэкэнде.

Я использовал следующий скрипт InstallData для добавления нового атрибута:

$installer = $setup;
$installer->startSetup();

/* @var CustomerSetup $customerSetup */
$customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);
$customerSetup->removeAttribute('customer_address', "chamber_of_commerce");

$customerEntity = $customerSetup->getEavConfig()->getEntityType('customer_address'); //customer
$attributeSetId = $customerEntity->getDefaultAttributeSetId();

$attributeSet = $this->attributeSetFactory->create();
$attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);

$customerSetup->addAttribute('customer_address', 'chamber_of_commerce', [
    'type' => 'varchar',
    'label' => 'Chamber of Commerce',
    'input' => 'text',
    'required' => false,
    'visible' => true,
    'user_defined' => true,
    'system' => false,
    'sort_order' => 150
]);

$attribute = $customerSetup->getEavConfig()->getAttribute('customer_address', 'chamber_of_commerce')
    ->addData([
        'attribute_set_id' => $attributeSetId,
        'attribute_group_id' => $attributeGroupId,
        'used_in_forms'=>['adminhtml_customer_address','customer_address_edit','customer_register_address']
    ]);

$attribute->save();

$installer->endSetup(); 

Я использовал 'used_in_forms'=>['adminhtml_customer_address','customer_address_edit','customer_register_address'] `, но кажется, что только в бэкэнд-форму добавляется автоматически, а также сохраняется новое значение.

Я вручную добавил вход для отображения атрибута в веб-интерфейсе нановый / изменить адрес в CustomerAccount, но мне не удается получить значение из БД или сохранить новое значение.

Я думаю, что что-то упустил, и я был бы очень признателен, если бы кто-то мог взглянуть и дать подсказку.

Я использую Magento 2.2.4

Обновление: 1. Я использовал наблюдатель для Magento \ Customer \ Model \ Address, чтобы сохранить значение для редактирования./ новый адрес со страницы MyAccount.

Чтобы получить значение, сохраненное также со страницы оформления заказа, я использовал:

2.1.extension_attributes для Customer AddressInterface

<extension_attributes for="Magento\Customer\Api\Data\AddressInterface">
        <attribute code="chamber_of_commerce" type="string" />
    </extension_attributes>

2.2.etc / fieldset:

<fieldset id="sales_convert_quote_address">
            <field name="chamber_of_commerce">
                <aspect name="to_customer_address" />
                <aspect name="to_order_address" />
            </field>
        </fieldset>

2.3.плагин для адреса клиента для функции beforeUpdateData

 <type name="Magento\Customer\Model\Address"> 
        <plugin disabled="false" name="vendor_plugin_quote_model_address" sortOrder="10" 
        type="Vendor\Module\Plugin\Customer\Model\Address"/>
    </type>
...