Magento2 сохранить новый атрибут адреса в кассе
Я пытаюсь сохранить геолокацию вместе с адресом клиента.
Я добавил Let & Lng, используя скрипт установки
$customerSetup->addAttribute('customer_address', 'latitude', [
'type' => 'varchar',
'label' => 'Latitude',
'input' => 'text',
'required' => false,
'visible' => true,
'visible_on_front' => true,
'user_defined' => false,
'sort_order' => 43,
'position' => 43,
'system' => 0,
]);
$attributeLat = $customerSetup->getEavConfig()->getAttribute('customer_address', 'latitude')
->addData([
'attribute_set_id' => $attributeSetId,
'attribute_group_id' => $attributeGroupId,
'used_in_forms' => ['adminhtml_customer_address', 'customer_address_edit', 'customer_register_address','customer_address'],
]);
$attributeLat->save();
//latitude - End
$customerSetup->addAttribute('customer_address', 'longitude', [
'type' => 'varchar',
'label' => 'Longitude',
'input' => 'text',
'required' => false,
'visible' => true,
'visible_on_front' => true,
'user_defined' => false,
'sort_order' => 43,
'position' => 43,
'system' => 0,
]);
$attributeLng = $customerSetup->getEavConfig()->getAttribute('customer_address', 'longitude')
->addData([
'attribute_set_id' => $attributeSetId,
'attribute_group_id' => $attributeGroupId,
'used_in_forms' => ['adminhtml_customer_address', 'customer_address_edit', 'customer_register_address','customer_address'],
]);
$attributeLng->save();
//longitude - End}
Я могу обновить значения в админ-панели без каких-либо проблем.
На странице оформления заказа появляются поля для "широты" и "долготы". Но значения не сохраняются вместе с адресом клиента.
Я использую Magento CE 2.2.3
любая помощь будет принята с благодарностью.
Спасибо
0 ответов
- Вам нужно добавить etc/extension_attributes.xml для Magento\Customer\Api\Data\AddressInterface:
<extension_attributes for="Magento\Customer\Api\Data\AddressInterface">
<attribute code="longitude" type="string" />
</extension_attributes>
- Добавьте etc/fieldset.xml:
<fieldset id="sales_convert_quote_address">
<field name="longitude">
<aspect name="to_customer_address" />
<aspect name="to_order_address" />
</field>
</fieldset>
- Добавьте плагин в di.xml для Magento\Customer\Model\Address, где вам нужно сохранить свой пользовательский атрибут в функции 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>
public function beforeUpdateData(
\Magento\Customer\Model\Address $subject,
\Magento\Customer\Api\Data\AddressInterface $address
)
И тогда вы сможете увидеть свой атрибут, сохраненный на адрес клиента.
Надеюсь, поможет!