Estoy tratando de agregar un campo personalizado entre la dirección de envío y las secciones del método de envío . Y quiero que los valores de este campo se almacenen tanto en tablas quote
como en sales_order
tablas en última instancia. Esto es algo similar a agregar un campo de "comentario de pedido", pero este campo debe aparecer justo después de la sección de dirección de envío y antes de la sección de método de envío.
Revisé las guías de desarrollo de Magento sobre cómo agregar un campo personalizado y un formulario personalizado al pago e implementé una solución hasta cierto punto.
Lo que he hecho hasta ahora:
- Se actualizó el
checkout_index_index.xml
diseño, se agregó un nuevouiComponent
(un contenedor) debajo del elemento "shippingAddress". - Se agregó el elemento (campo) que requiero dentro del contenedor.
- Reemplazar
/js/view/shipping.js
yshipping.phtml
en mi módulo personalizado. - Invoqué el contenedor hecho arriba dentro
shipping.phtml
entre la dirección de envío de pago y el método de envío (algo similar a agregar un nuevo formulario estático)
Ahora el campo que quiero se muestra en la página de pago de una página exactamente donde quiero. Pero me he encontrado con los siguientes problemas.
¿Cómo acceder al valor del campo personalizado que he agregado anteriormente? Estoy tratando de guardar el valor en un atributo de extensión shippingAddress. Agregué un mixin al
setShippingInformationAction
interior que intenta hacer lo siguienteshippingAddress['extension_attributes']['custom_field'] = shippingAddress.customAttributes['custom_field'];
Pero el código anterior realmente falla ya que el elemento no está en el shipping-address-fieldset
. Es posible que pueda obtener el valor a través del window
elemento. ¿Pero hay alguna manera de acceder a esto a través de Magento?
- ¿Hay alguna manera de guardar el valor de este elemento en el almacenamiento en caché local (
Magento_Checkout/js/checkout-data
) para que el valor persista incluso después de una actualización de la página?
Respuestas:
Según su pregunta, supongo que ya tiene configurados sus atributos de extensión. He llevado a cabo una modificación similar y espero que mi respuesta ayude.
En su módulo personalizado, cree un archivo requirejs-config para extender el procesador de envío predeterminado / predeterminado
Agregue su atributo de extensión a la carga útil.
Guarde el atributo en su presupuesto con un complemento (no estoy seguro si podría usar un observador aquí, no lo he verificado).
di.xml
SaveAddressInformation.php
Guarde el atributo en su pedido con un observador events.xml
SaveCustomFieldToOrder.php
fuente
map *
, use mixin en su lugar.Crea un complemento para esto
\Magento\Checkout\Block\Checkout\LayoutProcessor::process
método.Haga una entrada en di.xml en esta ruta
Crear clase de complemento en este directorio.
2 => Crear clase de complemento en este directorio.
app/code/CompanyName\Module\Model\Plugin\Checkout
}
Una vez hecho esto, consulte la página de pago.
fuente