Виходячи з вашого запитання, я вважаю, що у вас уже створені атрибути розширення. Я здійснив подібну модифікацію, і, сподіваюся, моя відповідь допомагає.
У власному модулі створіть файл-конфігурацію Requjs для розширення процесора доставки за замовчуванням / за замовчуванням
Простір імен / CustomModule / view / frontend / Requjs-config.js
var config = {
"карта": {
"*": {
'Magento_Checkout / js / модель / доставка-збереження-процесор / за замовчуванням': 'Namespace_CustomModule / js / model / shipping-save-procesor / default'
}
}
};
Додайте атрибут розширення до корисного навантаження.
/ * глобальне визначення, попередження * /
визначити (
[
'jquery',
'ко',
'Magento_Checkout / js / модель / цитата',
'Magento_Checkout / js / model / resource-url-manager',
"маг / сховище",
'Magento_Checkout / js / модель / Payment-service',
'Magento_Checkout / js / model / Payment / method-converter',
'Magento_Checkout / js / модель / процесор помилок',
"Magento_Checkout / js / model / full-screen loader",
'Magento_Checkout / js / action / select-billing-address'
],
функція (
$,
ко,
цитата,
resourceUrlManager,
зберігання,
оплата сервісу,
methodConverter,
errorProcessor,
fullScreenLoader,
selectBillingAddressAction
) {
'користуватися суворим';
повернути {
saveShippingInformation: function () {
вартісне навантаження;
if (! quote.billingAddress ()) {
selectBillingAddressAction (quote.shippingAddress ());
}
// Додавання атрибутів розширення до вашої адреси доставки
корисний вантаж = {
адресна інформація: {
shipping_address: quote.shippingAddress (),
billing_address: quo.billingAddress (),
shipping_method_code: quote.shippingMethod (). method_code,
shipping_carrier_code: quote.shippingMethod (), код оператора,
extension_attributes: {
custom_field: $ ('# custom_field'). val (),
}
}
};
fullScreenLoader.startLoader ();
повернути storage.post (
resourceUrlManager.getUrlForSetShippingInformation (цитата),
JSON.stringify (корисне навантаження)
) .done (
функція (відповідь) {
quo.setTotals (response.totals);
PaymentService.setPaymentMethods (methodConverter (response.payment_methods));
fullScreenLoader.stopLoader ();
}
) .fail (
функція (відповідь) {
errorProcessor.process (відповідь);
fullScreenLoader.stopLoader ();
}
);
}
};
}
);
Збережіть атрибут у вашій Цитаті за допомогою плагіна (Не впевнений, чи можете ви тут використовувати спостерігача, я не перевіряв)
di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Checkout\Model\ShippingInformationManagement">
<plugin name="Namespace_CustomModule_save_delivery_date_in_quote" type="Namespace\CustomModule\Plugin\Checkout\SaveAddressInformation" />
</type>
</config>
SaveAddressInformation.php
клас SaveAddressInformation
{
захищений $ quoReRepository;
публічна функція __construct (
\ Magento \ Quote \ Model \ QuoteRepository $ quoRepository
) {
$ this-> quoteRepository = $ quoRepository;
}
/ **
* @param \ Magento \ Checkout \ Model \ ShippingInformationManagement $ subject
* @param $ cartId
* @param \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface $ addressInformation
* /
публічна функція передSaveAddressInformation (
\ Magento \ Оформити замовлення \ Модель \ ShippingInformationManagement $ предмет,
$ cartId,
\ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface $ addressInformation
) {
$ extensionAttributes = $ addressInformation-> getExtensionAttributes ();
$ customField = $ extensionAttributes-> getCustomField ();
$ quote = $ this-> quoteRepository-> getActive ($ cartId);
$ quo-> setCustomField ($ customField);
}
}
Збережіть атрибут до замовлення за допомогою Observer events.xml
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="sales_model_service_quote_submit_before">
<observer name="unique_observer_name" instance="Namespace\CustomModule\Observer\SaveCustomFieldToOrder"/>
</event>
</config>
SaveCustomFieldToOrder.php
клас SaveCustomFieldToOrder реалізує ObserverInterface
{
/ **
* @var \ Magento \ Framework \ ObjectManagerInterface
* /
захищений $ _objectManager;
/ **
* @param \ Magento \ Framework \ ObjectManagerInterface $ objectmanager
* /
публічна функція __construct (\ Magento \ Framework \ ObjectManagerInterface $ objectmanager)
{
$ this -> _ objectManager = $ objectmanager;
}
виконання публічної функції (спостерігач EventObserver $)
{
$ order = $ observer-> getOrder ();
$ quoRepository = $ this -> _ objectManager-> create ('Magento \ Quote \ Model \ QuoteRepository');
/ ** @var \ Magento \ Quote \ Model \ Quote $ quote * /
$ quote = $ quoteRepository-> get ($ order-> getQuoteId ());
$ order-> setCustomField ($ quo-> getCustomField ());
повернути $ this;
}
}