gönderim adresinden önce fatura adresini yeniden sıralama (değiştirme)


17

sayfadaki kasada gönderim adresinden önce fatura adresini yeniden sıralamam gerekiyor. aslında mantık şimdi olduğundan daha farklı olmalıdır. gönderim adresi fatura adresinden farklıysa, adresi düzenleyebilmeniz gerekir. şimdi gönderim adresinden farklıysa fatura adresini düzenleyebilirsiniz. ayrıca fatura adresinin gönderim adresiyle aynı "sayfada" görünmesi gerekir. şu anda macenta ödeme adımlarında 1. adım.

bunu nasıl yaparım? belki bunun için bir eklenti var ama henüz bir tane bulamadım.

Alman bir dükkanın ekran görüntüsünü şöyle yaptım:

resim açıklamasını buraya girin

Fatura formu için .html şablon dosyasını buldum ve bu, checkout_index_index.xml'de bittiği yer gibi görünüyor:

<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>

Ama özellikle buraya yerleştirilmedi ve o yere enjekte edilen başka bir yer bulamıyorum.


2
Fatura adresi formu dosyaya eklenir Magento/Checkout/Block/Checkout/LayoutProcessor.php.
Aaron Allen

Evet bu kadar. Orada en azından yeniden sıralamayı başardım. Yine de adres mantığını değiştirmeliyiz.
steros

özel ödeme kullanıyor musunuz?
Amit Bera

Düşündüğüm Magento\Checkout\Block\Checkout\LayoutProcessorgibi pozisyonu geçersiz kılmalı ve değiştirmeliyim. Emin değilim
Ankit Shah

1
@AnkitShah Bu işe yaramayacak çünkü fatura adresini tüm faturalandırma adımı yerine taşımam gerekiyor. Ayrıca Aaron'un bunu yapmanın ilk adımına işaret ettiği gibi LayoutProcessor üzerine yazan bir modül yazmaktır. Bunu zaten başarılı bir şekilde yaptım ancak fatura adresinin gönderim adresiyle aynı olmasını seçme mantığı doğru değil. Ve ayrıca tüm sürecin işe yarayıp yaramayacağından emin değilim. En azından kasada devam edebilirim ama şimdiye kadar yan etkilerden emin değilim.
steros

Yanıtlar:


11

Aaron'un işaret ettiği gibi, form eklenir Magento/Checkout/Block/Checkout/LayoutProcessor.php. Bu bilgilerle, bu işlemciye bağlanan bir eklenti içeren bir modül geliştirdim:

app/code/<vendor>/<module>/Model/Checkout/LayoutProcessorPlugin.php

<?php

namespace <vendor>\ReorderBillingForm\Model\Checkout;

class LayoutProcessorPlugin
{

    /**
     * @param \Magento\Checkout\Block\Checkout\LayoutProcessor $subject
     * @param array $jsLayout
     * @return array
     */

    public function afterProcess(
        \Magento\Checkout\Block\Checkout\LayoutProcessor $subject,
        array $jsLayout
    )
    {
        // get billing address form at billing step
        $billingAddressForm = $jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']['payment']['children']['afterMethods']['children']['billing-address-form'];

        // move address form to shipping step
        $jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']['children']['billing-address-form'] = $billingAddressForm;

        // remove form from billing step
        unset($jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']['payment']['children']['afterMethods']['children']['billing-address-form']);

        return $jsLayout;
    }
}

app/code/<vendor>/<module>/etc/module.xml

<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="<vendor>_<module>" setup_version="1.0.0"/>
</config>

app/code/<vendor>/<module>/etc/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\Block\Checkout\LayoutProcessor">
        <plugin name="reorder-billing-form"
                type="<vendor>\<module>\Model\Checkout\LayoutProcessorPlugin" sortOrder="<yourOrder>"/>
    </type>
</config>

app/code/<vendor>/<module>/registration.php

<?php

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    '<vendor>_<module>',
    __DIR__
);

Bu, fatura adres formunu başarılı bir şekilde yeniden sıralar (ve umarım diğer insanlar için bazı baş ağrılarını kaydeder). Ancak javascript (?) Üzerinde billing address is the same as shipping addressmekanizmayı işleyen hala çalışmalara ihtiyaç vardır . Bu hala "standart" şekilde çalışıyor gibi.

İlave bilgi:

Arka uçta, yeni bir sipariş oluşturursanız, düzenin tam olarak istendiği gibi olduğunu gördüm. Faturalandırma formu gönderim formunun "öncesidir" ve mantık da bunun tersidir. Eğer zaman bulabilirseniz orada koda bakmak faydalı olabilir düşünüyorum. Belki de ön uçta kullanmak mümkündür.


Ad alanı ad alanı olmamalı <vendor>\ReorderBillingForm\Block\Checkout;mı?
Frank Groot

2
Emin değil. Önbellek sorunlarıyla karşılaştım (yine) görünüyor. Bazen işe yaramazdı, bazen işe yaradı. Modülü yeniden yazdım ve şimdi her zaman çalışıyor. Kullanmak önemliydi aroundProcess. Yazımı güncelledim.
steros

Cevabınızı güncellediğiniz için teşekkür ederiz, ancak şu hatayı alıyorumNotice: Undefined index: billing-address-form in LayoutProcessorPlugin.php:20
Frank Groot

Hmm garip, anlamadım. Ancak, hata ayıklama yoluyla $ jsLayout'un nasıl yapılandırıldığını kontrol edebilirsiniz. Şu anda çalışan bir örneğim yok. Başka bir tane ayarlarsam sorunun ne olabileceğini bulmaya çalışacağım.
steros

Cevabı zaten güncellediniz mi? Process @DarsVaeda etrafında değil sonra halaProcess kullanıyorsunuz Çözümünüzü kullanıyoruz, ancak Ödeme Adımında Billign Adresi hala görünüyor
Alex

0

Hata Undefined index: billing-address-formiçinde LayoutProcessorPlugin.phpsen ödeme özelliği var oluşur "Açık Ekran Fatura Adresi " için sette " Ödeme Yöntemi " yerine " Ödeme Sayfa ".

Şununla düzelt:

UPDATE core_config_data SET VALUE = 1 WHERE path = 'checkout/options/display_billing_address_on';

Bunu DarsVaedas yazıya yorum olarak eklemeyi tercih ederdim (yukarıya bakın), ancak iznim yok gibi görünüyor…


Bunu düzeltmek için sql deyimi eklediğiniz için @ jaybong teşekkürler!
digijay
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.