Como entendi da sua pergunta, você deseja sempre ter um método de envio selecionado quando alguém entrar na página de checkout.
Para conseguir isso, precisamos substituir um javascript do módulo Magento_Checkout.
Primeiramente, precisamos criar um módulo:
Namespace / Module / registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Namespace_Module',
__DIR__
);
Namespace / 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="Namespace_Module" setup_version="1.0.0">
<sequence>
<module name="Magento_Checkout"/>
</sequence>
</module>
</config>
Depois disso, precisamos criar os requirejs para substituir esses js.
Namespace / Module / view / frontend / requirejs-config.js
var config = {
map: {
'*': {
'Magento_Checkout/js/model/checkout-data-resolver': 'Namespace_Module/js/model/checkout-data-resolver'
}
}
};
Agora temos que copiar checkout-data-resolver.js
a partir Magento_Checkout/view/frontend/web/js/model
do nosso módulo com o mesmo caminhoNamespace_Module/view/frontend/web/js/model
Depois disso, precisamos alterar uma condição dentro da função resolveShippingRates: function (ratesData)
De:
...
if (ratesData.length == 1) {
//set shipping rate if we have only one available shipping rate
selectShippingMethodAction(ratesData[0]);
return;
}
...
Para:
...
if (ratesData.length >= 1) {
//set shipping rate if we have only one available shipping rate
selectShippingMethodAction(ratesData[0]);
return;
}
...
E é isso, tudo o que você precisa fazer agora é:
- Ative o módulo: php bin / magento module: enable Namespace_Module
- Execute uma atualização de instalação: php bin / magento setup: upgrade
- Faça uma implementação estática: php bin / magento setup: static-content: deploy
selectShippingMethodAction(ratesData[0]);
Modifiquei isso e adicionei a chamada ao downn um pouco mais baixo no método, depois de procurar os métodos já selecionados, para que não os substitua.Isso tornará impossível selecionar qualquer outra opção de envio. Isso resolve o problema para mim:
fonte
Não há necessidade de todo o módulo alcançar essa alteração. Você pode estender o módulo do Google Checkout e substituir seu tema.
Copie o arquivo js checkout-data-resolver.js
de
vendor\magento\module-checkout\view\frontend\web\js\model
para
app \ design \ frontend \ Namespace \ ThemeName \ Magento_Checkout \ web \ js \ model.
Localize a linha com o seguinte código:
if (ratesData.length == 1) {
e substitua-o por:
if (ratesData.length >= 1 && !selectedShippingRate) {
fonte
O que você provavelmente deseja fazer é selecionar o método de envio mais barato por padrão.
No seu módulo durante a execução do checkout-resolvedor de dados, opcionalmente, você poderá usar um mixin.
no método resolveShippingRates, modifique conforme abaixo:
fonte
Enquanto os métodos acima sugerem substituir as funções js, eu recomendaria o uso de mixins para evitar conflitos de código desnecessários:
No seu frontend requirejs-config.js, adicione o seguinte:
No seu checkout-data-resolver.js
Como alternativa, você pode fazer o download do módulo aqui, que permite selecionar um método de envio e pagamento padrão : Método de envio e pagamento padrão [M2]
fonte
Qualquer pessoa que esteja usando o onestepcheckout pode tentar o seguinte:
Eu sei que está parecendo estúpido, mas por algum motivo, adicionar esse atraso realmente funcionou para mim. Os custos de envio estão se atualizando assim.
fonte