配送先住所の前に請求先住所を並べ替える(切り替える)方法


17

onepageチェックアウトで、配送先住所の前に請求先住所を再注文する必要があります。実際、ロジックは現在とは逆のはずです。配送先住所が請求先住所と異なる場合は、編集できるはずです。請求先住所が配送先住所と異なる場合は編集できるようになりました。また、請求先住所は配​​送先住所と同じ「ページ」に表示されます。現在、magentoのチェックアウト手順のステップ1。

どうすればいいですか?このためのプラグインがあるかもしれませんが、まだ見つかりませんでした。

ドイツの店のスクリーンショットを添付して、次のようにしました。

ここに画像の説明を入力してください

請求フォームの.htmlテンプレートファイルを見つけましたが、これが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>

しかし、それは特にここに置かれておらず、その場所に注入される別の場所を見つけることができないようです。


2
請求先住所フォームがファイルに追加されますMagento/Checkout/Block/Checkout/LayoutProcessor.php
アーロンアレン

はい、そうです。そこでは、少なくとも再注文できました。それでもアドレスロジックを切り替える必要があります。
ステロス

カスタムチェックアウトを使用していますか?
アミットベラ

Magento\Checkout\Block\Checkout\LayoutProcessor私が考えているように、位置をオーバーライドして変更する必要があります。わからない
アンキットシャー

1
@AnkitShah請求ステップ全体ではなく、請求先住所を移動するだけなので、機能しません。また、アーロンが最初のステップを指摘したように、LayoutProcessorを上書きするモジュールを作成します。私はすでにそれを成功させましたが、請求先住所を配送先住所と同じものにするというロジックはまだ正しくありません。さらに、プロセス全体が機能するかどうかもわかりません。少なくともチェックアウトに進むことができますが、これまでの副作用についてはわかりません。
ステロス

回答:


11

アーロンが指摘したように、フォームはに追加されMagento/Checkout/Block/Checkout/LayoutProcessor.phpます。この情報を使用して、そのプロセッサにフックするafterプラグインを持つモジュールを開発しました。

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__
);

これにより、請求先住所フォームの並べ替えが正常に行われます(他の人の頭痛の種がなくなることを願っています)。しかし、billing address is the same as shipping addressメカニズムを処理するjavascript(?)にはまだ作業が必要です。これでも「標準」の方法で機能します。

追加情報:

バックエンドで、新しい注文を作成する場合、レイアウトがまさに望みどおりであることを確認しました。請求フォームは出荷フォームの「前」にあり、ロジックも逆です。時間を見つけることができれば、そこでコードを見ることは有益だと思います。フロントエンドでも使用できるかもしれません。


名前空間は名前空間であってはなりません<vendor>\ReorderBillingForm\Block\Checkout;か?
フランクグルート

2
わからない。キャッシングの問題に出くわしました(もう一度)。時にはうまくいかないこともあれば、うまくいくこともありました。モジュールを書き直しましたが、今では常に機能します。使用することが重要aroundProcessでした。投稿を更新しました。
ステロス

回答を更新していただきありがとうございますが、次のエラーが表示されますNotice: Undefined index: billing-address-form in LayoutProcessorPlugin.php:20
フランクグルート

うーん奇妙な、私はそれを取得しません。ただし、デバッグすることで、$ jsLayoutの構造を確認できます。現在、実行中のインスタンスはありません。別のものをセットアップした場合、問題の原因を見つけようとします。
ステロス

すでに答えを更新しましたか?あなたはまだ周りの私たちはあなたのソリューションを使用している@DarsVaedaを処理しますが、まだ登場決済ステップにBillignアドレスを持っていない、afterProcessを使用している
アレックス・

0

エラーは、チェックアウトプロパティ「請求先住所を表示する」を「支払いページ」ではなく「支払い方法」に設定した場合Undefined index: billing-address-formLayoutProcessorPlugin.php発生します。

修正:

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

これをコメントとしてDarsVaedasの投稿に追加することをお勧めします(上記を参照)が、許可がないようです…


これを修正するためにSQLステートメントを追加してくれてありがとう@jaybong!
デジジェイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.