Я пытаюсь добавить настраиваемое поле между адресом доставки и разделами метода доставки . И я хочу , значение этого поля должны быть сохранено в обоих quote
и sales_order
таблицах , в конечном счете. Это похоже на добавление поля «Комментарий к заказу», но это поле должно появиться сразу после раздела адреса доставки и перед разделом метода доставки.
Я просмотрел руководства разработчика Magento о том, как добавить настраиваемое поле и настраиваемую форму к оформлению заказа, и в определенной степени реализовал решение.
Что я сделал до сих пор:
- Обновлен
checkout_index_index.xml
макет, добавлен новыйuiComponent
(контейнер) под пунктом «shippingAddress». - Добавлен элемент (поле), который мне нужен внутри контейнера.
- Переопределите
/js/view/shipping.js
иshipping.phtml
в моем пользовательском модуле. - Вызванный выше сделанный контейнер внутри
shipping.phtml
между адресом доставки и способом доставки (что-то похожее на добавление новой статической формы)
Теперь нужное поле отображается на одностраничной кассе именно там, где я хочу. Но я столкнулся с нижеприведенными проблемами.
Как получить доступ к значению настраиваемого поля, которое я добавил выше? Я пытаюсь сохранить значение в атрибуте расширения shippingAddress. Я добавил миксин
setShippingInformationAction
внутрь, чтобы попытаться сделать нижеshippingAddress['extension_attributes']['custom_field'] = shippingAddress.customAttributes['custom_field'];
Но приведенный выше код фактически завершается сбоем, так как элемент отсутствует в shipping-address-fieldset
. Я мог бы получить значение через window
элемент. Но есть ли способ получить доступ к этому через Magento?
- Есть ли способ сохранить значение этого элемента в локальном кеш-хранилище (
Magento_Checkout/js/checkout-data
), чтобы оно сохранялось даже после обновления страницы?
Ответы:
Исходя из вашего вопроса, я предполагаю, что у вас уже установлены атрибуты расширений. Я провел аналогичную модификацию, и, надеюсь, мой ответ поможет.
В вашем пользовательском модуле создайте файл requirejs-config, чтобы расширить стандартный процессор доставки / default
Добавьте свой атрибут расширения в полезную нагрузку.
Сохраните атрибут к вашей цитате с помощью плагина (не уверен, что вы могли бы использовать наблюдателя здесь, я не проверял).
di.xml
SaveAddressInformation.php
Сохраните атрибут в вашем заказе с помощью Observer events.xml
SaveCustomFieldToOrder.php
источник
map *
, вместо этого используйте mixin.Создайте плагин для этого
\Magento\Checkout\Block\Checkout\LayoutProcessor::process
метода.Сделайте запись в di.xml по этому пути
Создайте класс плагина в этом каталоге.
2 => Создать класс плагина в этом каталоге.
app/code/CompanyName\Module\Model\Plugin\Checkout
}
Как только это будет сделано, проверьте страницу оформления заказа.
источник