magento2の請求先住所セクションに新しいカスタムフィールドを追加する方法


7

magento2請求先住所セクションに新しいフィールドを追加しようとしました。以下のリンクをたどって、配送先住所ブロックに新しいフィールドを追加しました

http://oyenetwork.com/articles/magento2-devliery-date-module-creation-from-scratch/

新しいフィールドを配送先住所セクションに追加しました。しかし、私のサイトでは、「仮想製品」を使用しています。新しいカスタムフィールドを課金セクションに追加します。以下のように「LayoutProcessorPlugin.php」コードを変更しました

$ jsLayout ['components'] ['checkout'] ['children'] ['steps'] ['children'] ['billing-step'] ['children'] ['payment'] ['children'] [ 'payments-list'] ['children'] ['delivery_date']

の代わりに

$ jsLayout ['components'] ['checkout'] ['children'] ['steps'] ['children'] ['shipping-step'] ['children'] ['shippingAddress'] ['children'] [ 'shipping-address-fieldset'] ['children'] ['delivery_date']

しかし、それは機能しません。magento2の請求先住所ブロックに新しいカスタムフィールドを追加するにはどうすればよいですか?

回答:


13

カスタムモジュール(カスタム属性の作成に使用したもの)にプラグインを作成し、次のようなコードを作成する必要があります。

namespace Package\Name\Plugin\Checkout;

class LayoutProcessor
{
    public function afterProcess(
        \Magento\Checkout\Block\Checkout\LayoutProcessor $subject,
        array $jsLayout
    ) {
        // Loop all payment methods (because billing address is appended to the payments)
        $configuration = $jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']['payment']['children']['payments-list']['children'];
        foreach ($configuration as $paymentGroup => $groupConfig) {
            if (isset($groupConfig['component']) AND $groupConfig['component'] === 'Magento_Checkout/js/view/billing-address') {

                $jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
                ['payment']['children']['payments-list']['children'][$paymentGroup]['children']['form-fields']['children']['custom_attribute_code'] = [
                    'component' => 'Magento_Ui/js/form/element/abstract',
                    'config' => [
                        'template' => 'ui/form/field',
                        'elementTmpl' => 'ui/form/element/input',
                        'id' => 'custom_attribute_id',
                    ],
                    'dataScope' => $groupConfig['dataScopePrefix'] . '.custom_attribute_id',
                    'label' => __('Custom attribute label'),
                    'provider' => 'checkoutProvider',
                    'visible' => true,
                    'validation' => [
                        'required-entry' => true,
                        'min_text_length' => 0,
                    ],
                    'sortOrder' => 300,
                    'id' => 'custom_attribute_id'
                ];
            }
        }

        return $jsLayout;
    }
}

お役に立てれば


この後、カスタムアドレス属性値を請求先住所の見積もりテーブルに保存するにはどうすればよいですか?
chirag

そのためには、新しいフィールドを追加するための見積もり用のプラグインを作成する必要があります
Vlad Patru

ドロップダウンとラジオボタンを追加するにはどうすればよいですか。
マニッシュ

@マニッシュ私はあなたがドロップダウン/ラジオボタンを必要とするもののために、質問を理解していませんか?ほとんどの場合、サポートされているフォーム要素を確認してを変更するelementTmplか、必要なタイプがまだ完了していない場合は新しいタイプを作成する必要があります。Magento_UIこのコンポーネントを確認してください
Vlad Patru 2017

magento.stackexchange.com/questions/216191/…それについて私を助けてくれませんか。
Magento2 Devloper 2018年

0

@Vlad Patruは完全に正しいです。

で取得したすべての支払い方法のこのループを追加したいだけです$configuration。ただし、Magento 2.1.4以降のリリースでは、チェックアウト構成に [請求先住所を表示する]オプション([ストア]-> [構成]-> [チェックアウト]-> [チェックアウトオプション])が追加されていることに注意してください。次の2つの値があります。

お支払い方法 - お支払い方法ごとに請求先住所が表示されます

支払いページ -請求先住所が支払い方法の上に表示されます

だから、$configuationときにのみ、すべての支払方法を返しますディスプレイ請求先住所があたりとして選択されている決済方法

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.