Como adicionar um novo campo personalizado à seção de endereço de cobrança no magento2

7

Eu tentei adicionar um novo campo na seção de endereço de cobrança do magento2. Eu segui o link abaixo para adicionar um novo campo no bloco de endereço de entrega

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

Adicionei um novo campo à seção de endereço de entrega com sucesso. Mas no meu site, eu tenho usado " produtos virtuais ". Quero adicionar meu novo campo personalizado à seção de faturamento. Eu apenas modifiquei o código " LayoutProcessorPlugin.php " como abaixo

$ jsLayout ['componentes'] ['checkout'] ['filhos'] ['etapas'] ['filhos'] ['etapa da cobrança'] ['filhos'] ['pagamento'] ['filhos'] [ 'payment-list'] ['children'] ['delivery_date']

ao invés de

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

Mas isso não funciona. Como adicionar meu novo campo personalizado ao bloco de endereço de cobrança no magento2?

DRAJI
fonte

Respostas:

13

você precisa criar um plug-in no seu módulo personalizado (aquele que você usou para criar o atributo personalizado) e ter o código parecido com o seguinte:

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

Espero que isto ajude

Vlad Patru
fonte
depois disso, como posso armazenar o valor do atributo de endereço personalizado na tabela de cotações para o endereço de cobrança?
21417
para que você deve criar um plugin para o Orçamento para adicionar o novo campo
Vlad Patru
Como adiciono o menu suspenso e o botão de opção?
Manish 12/12
@ Manish Eu não entendo a pergunta, para o que você precisa dropdown / radiobutton? provavelmente você deve verificar quais elementos do formulário são suportados e alterar o elementTmplou criar um novo tipo, se o desejado ainda não estiver pronto. Olhe-se no Magento_UIcomponente para isso
Vlad Patru
magento.stackexchange.com/questions/216191/… você pode me ajudar nisso.
Magento2 Devloper
0

@Vlad Patru está absolutamente certo.

Só quero acrescentar que esse loop de todos os métodos de pagamento é obtido em $configuration. Porém, note que a partir do Magento 2.1.4, a configuração do checkout tem a opção Exibir endereço de cobrança adicional ativado (Lojas -> Configuração -> Checkout -> Opções de checkout) . Tem dois valores possíveis:

Forma de pagamento - o endereço de cobrança é exibido por forma de pagamento

Página de pagamento - o endereço de cobrança é exibido acima das formas de pagamento

Portanto, $configuationretornará todos os métodos de pagamento somente quando Exibir endereço de cobrança estiver selecionado, conforme Método de pagamento .

Kazim Noorani
fonte