en la página de pago de Onepage necesito reordenar la dirección de facturación antes de la dirección de envío. de hecho, la lógica debería ser al revés de lo que es ahora. Si la dirección de envío difiere de la dirección de facturación, debería poder editarla. ahora puede editar la dirección de facturación si difiere de la dirección de envío. Además, la dirección de facturación debe aparecer en la misma "página" que la dirección de envío. Actualmente paso 1 en los pasos de pago de Magento.
¿Cómo haría esto? tal vez hay un complemento para esto, pero aún no pude encontrar uno.
Adjunto una captura de pantalla de una tienda alemana que lo hace así:
Encontré el archivo de plantilla .html para el formulario de facturación y parece que este es el lugar donde termina en checkout_index_index.xml:
<item name="billing-step" xsi:type="array">
<item name="component" xsi:type="string">uiComponent</item>
<item name="sortOrder" xsi:type="string">2</item>
<item name="children" xsi:type="array">
<item name="payment" xsi:type="array">
<item name="component" xsi:type="string">Magento_Checkout/js/view/payment</item>
<item name="config" xsi:type="array">
<item name="title" xsi:type="string" translate="true">Payment</item>
</item>
<item name="children" xsi:type="array">
<!-- ... -->
<!-- merge your payment methods here -->
<item name="afterMethods" xsi:type="array">
<item name="component" xsi:type="string">uiComponent</item>
<item name="displayArea" xsi:type="string">afterMethods</item>
<item name="children" xsi:type="array">
<!-- merge additional data after payment methods here -->
<!-- I think here the billing form ends up -->
</item>
</item>
</item>
</item>
</item>
</item>
Pero no está específicamente ubicado aquí y parece que no puedo encontrar otro lugar donde se inyecte en ese lugar.
Magento/Checkout/Block/Checkout/LayoutProcessor.php
.Magento\Checkout\Block\Checkout\LayoutProcessor
y cambiar de posición como estoy pensando. No estoy seguroRespuestas:
Como Aaron señaló, se agrega el formulario
Magento/Checkout/Block/Checkout/LayoutProcessor.php
. Con esta información desarrollé un módulo con un plugin after que se conecta a ese procesador:app/code/<vendor>/<module>/Model/Checkout/LayoutProcessorPlugin.php
app/code/<vendor>/<module>/etc/module.xml
app/code/<vendor>/<module>/etc/di.xml
app/code/<vendor>/<module>/registration.php
Esto reordena exitosamente el formulario de dirección de facturación (y con suerte ahorra algunos dolores de cabeza para otras personas). Pero todavía hay trabajo necesario en el javascript (?) Que maneja el
billing address is the same as shipping address
mecanismo. Como esto todavía funciona de la manera "estándar".Información adicional:
Vi que en el backend si creas un nuevo pedido, el diseño es exactamente el deseado. El formulario de facturación es "anterior" al formulario de envío y la lógica también es al revés. Si puedo encontrar el tiempo, creo que podría ser beneficioso mirar el código allí. Quizás también sea posible usarlo en la interfaz.
fuente
<vendor>\ReorderBillingForm\Block\Checkout;
?aroundProcess
. Actualicé mi publicación.Notice: Undefined index: billing-address-form
in LayoutProcessorPlugin.php:20
El error
Undefined index: billing-address-form
en elLayoutProcessorPlugin.php
que ocurre cuando se tiene la caja propiedad "para mostrar la dirección de facturación en " en " Forma de pago " en lugar de " página de pago ".Arreglar con:
Hubiera preferido agregar esto como un comentario a la publicación de DarsVaedas (ver arriba), pero parece que no tengo el permiso ...
fuente