Estou tentando adicionar um campo personalizado entre as seções de endereço e método de envio . E eu quero que os valores desse campo sejam armazenados em ambas quote
e sales_order
tabelas. Isso é semelhante à adição de um campo "comentário do pedido", mas esse campo deve aparecer logo após a seção de endereço de entrega e antes da seção de método de entrega.
Analisei os guias de desenvolvimento do Magento sobre como adicionar um campo personalizado e um formulário personalizado ao checkout e implementei uma solução em certa medida.
O que eu fiz até agora:
- Atualizado o
checkout_index_index.xml
layout, adicionado um novouiComponent
(um contêiner) no item "shippingAddress". - Adicionado o elemento (campo) necessário dentro do contêiner.
- Substituir o
/js/view/shipping.js
eshipping.phtml
no meu módulo personalizado. - Invocou o contêiner criado acima,
shipping.phtml
entre o endereço de entrega da verificação geral e o método de entrega (algo semelhante à adição de um novo formulário estático)
Agora, o campo que eu quero está sendo renderizado no checkout de uma página exatamente onde eu quero. Mas eu encontrei problemas abaixo.
Como acessar o valor do campo personalizado que adicionei acima? Estou tentando salvar o valor em um atributo de extensão shippingAddress. Eu adicionei um mixin para
setShippingInformationAction
dentro que tenta fazer o abaixoshippingAddress['extension_attributes']['custom_field'] = shippingAddress.customAttributes['custom_field'];
Mas o código acima realmente falha, pois o elemento não está no shipping-address-fieldset
. Talvez eu consiga obter o valor através do window
elemento Mas existe uma maneira de acessar isso através do Magento?
- Existe uma maneira de salvar o valor desse elemento no armazenamento em cache local (
Magento_Checkout/js/checkout-data
) para que o valor persista mesmo após a atualização da página?
Respostas:
Com base na sua pergunta, suponho que você já tenha os atributos de extensão configurados. Realizei uma modificação semelhante e espero que minha resposta ajude.
Em seu módulo Customizado, crie um arquivo requirejs-config para estender o processador de remessa padrão /
Adicione seu atributo de extensão à carga útil.
Salve o atributo da sua cotação com um plug-in (não tenho certeza se você poderia usar um observador aqui, eu não marquei).
di.xml
SaveAddressInformation.php
Salve o Atributo no seu pedido com um Observer events.xml
SaveCustomFieldToOrder.php
fonte
map *
, use mixin.Crie um plug-in para este
\Magento\Checkout\Block\Checkout\LayoutProcessor::process
método.Faça uma entrada em di.xml neste caminho
Crie uma classe de plug-in neste diretório.
2 => Criar classe de plug-in neste diretório.
app/code/CompanyName\Module\Model\Plugin\Checkout
}
Feito isso, verifique a página de checkout.
fonte