Calculadora de taxa de envio do Shopify para tema Dawn e muito mais

Shopify Shipping Rate Calculator for Dawn Theme and more

Compatibilidade: SOMENTE todos os temas GRATUITOS do Shopify 2.0 . Funciona da versão inferior até a versão 11

Como proprietário de uma loja online, uma das coisas mais importantes a considerar são as taxas de envio. Fornecer taxas de envio precisas pode fazer ou anular uma venda, e é crucial garantir que seus clientes tenham acesso a essas informações antes de fazer uma compra.

Com nosso código, ele funciona perfeitamente com os temas gratuitos do Shopify 2.0, e as informações de envio serão baseadas nas configurações de envio e entrega do Shopify. Para acessar essas configurações, basta clicar em ‘Configurações’ no canto inferior esquerdo da sua página de administração e selecionar ‘Envio e Entrega’. E a melhor parte? Não são necessárias bibliotecas externas!

Fornecer taxas de envio precisas antecipadamente pode ajudar a construir a confiança de seus clientes e, em última análise, gerar mais vendas para sua loja online.

E para ter certeza de que você está confiante em sua compra, convido você a conferir minha loja de demonstração (senha: Made4Uo) antes de assumir qualquer compromisso.

Consulte a seção Obter estimativas de envio abaixo. Seção UPSELL não incluída.

Imagem da calculadora de frete

O que você está comprando:

  • Adicione calculadora de frete à página do carrinho
  • Atribuir um país padrão
  • O design pode depender do tema do Shopify em uso
  • Estilo CSS baseado nas configurações CSS padrão do tema
  • Atualize o preço na página do carrinho assim que o frete for selecionado

O que torna nosso código melhor:

  • Não usamos bibliotecas externas, com isso dito, nosso código não terá nenhum efeito mínimo no desempenho de velocidade do seu site
  • Não deixamos nem adicionamos códigos para anunciar em nosso site
  • Nosso código é compatível com dispositivos móveis

Quaisquer problemas relacionados ao código serão corrigidos sem custo adicional, excluindo solicitações de customização de código. Basta entrar em contato conosco em "Converse conosco". Estamos a apenas um botão de distância.

Para iniciar:

1. Na sua página de administração, clique em Loja Online > Temas > Ações > Editar código
2. Na pasta Snipper, crie um snippet. Nomeie-o como calculadora de envio . O arquivo deve mostrar shipping-calculator.liquid na pasta de snippets.
3. Cole o código abaixo no arquivo. Certifique-se de clicar em SALVAR.

 { % se configurações. calculadora_de_envio % } 
< envio - dados da calculadora - moeda = " {{ 0 | money | remove: " 0,00 " }} " dados - carrinho - total = " {{ cart_total }} " dados - carrinho - dinheiro - total = " {{ cart_total | money_with_currency }} " > 
<h3> { { configurações . expedição_calculadora_heading | padrão : 'Obter estimativas de envio' } } </ h3 >
 < formulário > 
< label class = "form__label" for = "address_country" > País </ label >
 < p classe = "selecionar" > 
< select class = "select__select" id = "address_country" name = "shipping_address[country]"
 dados - padrão = " {% if shop.customer_accounts_enabled and customer %} {{ customer.default_address.country }} {% elsif settings.shipping_calculator_default_country != '' %} {{ settings.shipping_calculator_default_country }} {% endif %} " > 
{ { country_option_tags } }
 </ selecione >
 { % renderizar 'ícone-caret' % }
 </ p >

 < div class = "província-contêiner" > 
< label class = "form__label" for = "address_province" id = "address_province_label" > Província / Estado </ label >
 < p class = "select" id = "address_province_container" > 
< select class = "select__select" id = "address_province" name = "shipping_address[province]"
 dados - padrão = " {% if shop.customer_accounts_enabled and customer and customer.default_address.province != '' %} {{ customer.default_address.province }} {% endif %} " > 
{ { província_option_tags | escapar } }
 </ selecione >
 { % renderizar 'ícone-caret' % }
 </ p >
 </div> _ _ 
< label class = "form__label" for = "address_zip" > CEP / Código Postal </ label >
 < p classe = "selecionar" > 
< input type = "text" class = "field__input" id = "address_zip" name = "shipping_address[zip]" { % if shop. customer_accounts_enabled e cliente % } value = " {{ customer.default_address.zip }} " { % endif % } /> 
</ p >
 < button type = "enviar" class = "botão obter taxas" > 
<span> { { configurações . Shipping_calculator_submit_button_label | padrão : 'Calcular frete' } } </ span >
 < div class = "loading-overlay__spinner calculadora-loader oculto" > 
< svg ária - oculto = "true" focusable = "falso" role = "apresentação" class = "spinner" viewBox = "0 0 66 66" xmlns = "http://www.w3.org/2000/svg" > 
< círculo classe = "caminho" preenchimento = "nenhum" traço - largura = "6" cx = "33" cy = "33" r = "30" </ círculo >
 </svg> _
 </div> _ _ 
</ botão >
 </ formulário >
 < div class = "wrapper-response" </ div >
 < span class = "caixa de mensagem de erro oculta" </ span >
 </ frete - calculadora > 
<roteiro> _
 classe e estende HTMLElement {
 construtor ( ) {
 super ( ) ;
 esse . cS = isso . querySelector ( "#endereço_país" ) ; 
esse . pS = isso . querySelector ( "#address_province" ) ;
 esse . pC = isso . querySelector ( ".province-container" ) ; 
esse . eu ( ) ;

 esse . cT = isso . conjunto de dados . carrinhoTotal ;

 esse . eu = isso . querySelector ( ".calculadora-loader" ) ; 
esse . cS . addEventListener ( " alterar " , isto.cU.bind ( isto ) ) ; 
esse . gRb = isto . querySelector ( ".get-taxas" ) ; 
esse . gRb . addEventListener ( " clique " , isto.gSr.ligar ( este ) ) ;
 
esse . wR = isso . querySelector ( ".wrapper-response" ) ; 
esse . wR . addEventListener ( " alterar " , isto.rTp.ligar ( isto ) ) ; 
esse . eMb = isto . querySelector ( ".error-message-box" )
 }
 eu ( ) { 
esse . cS . valor = isto . cS . conjunto de dados [ "padrão" ] ;
 esse . cU ( )
 }

 c ( e ) {
 retornar { 
método : e ,
 cabeçalhos : {
 Aceite : `application / json` ,
 "X-Solicitado-Com" : "XMLHttpRequest"
 }
 }
 }

 cU ( ) { 
if ( este.pLu ( ) . comprimento > 0 ) {
 seja t = `` ; 
for ( deixe e = 0 ; e < este.pLu ( ) . comprimento ; e ++ ) { 
t += ` < option value = "${this.pLu()[e][1]}" > $ { this . pLu ( ) [ e ] [ 0 ] } </ opção > `
 } 
esse . PS . HTML interno = t ;
 esse . pc . estilo . display = "bloco"
 } outro {
 esse . pc . estilo . exibir = "nenhum"
 } 
}
 pLu ( ) {
 retornar JSON. analisar ( este .cS .opções [ este .cS .selecionadoIndex ] .dataset.províncias ) _
 }
 gSr ( e ) { 
e. preventDefault ( ) ;
 const t = new FormData ( e.target.mais próximo ( "formulário" ) ) ; 
const s = novo URLSearchParams ( t ) . para sequenciar ( ) ;
 esse . eu . lista de classes . alternar ( "oculto" ) ; 
esse . gRb . querySelector ( "span" ) . lista de classes . alternar ( "oculto" ) ;
 const r = `carrinho / taxas_de_envio. json ?$ { s } ` ; 
buscar ( r , isto . c ( "GET" ) ) . então ( e => e. json ( ) ) . então ( e => {

 console. registro ( e ) 
if ( por exemplo, zip || e. país ) {
 esse . cF ( e ) ;
 esse . wR . HTML interno = ""
 esse . rOp ( ) ; 
} outro {
 esse . eMb . lista de classes . adicionar ( "oculto" ) ;
 seja r = `` ;
 const i = e. taxas de envio ; 
for ( seja s = 0 ; s < i. comprimento ; s ++ ) {
 const a = i [ s ] . fonte ;
 deixe e ;
 mudar ( a ) { 
caso "dhl_express" :
 e = "DHL Expresso" ;
 quebrar ;
 caso "usps" :
 e = "USPS" ;
 quebrar ;
 caso "ups" : 
e = "UPS" ;
 quebrar ;
 caso "dpd" :
 e = "DPD" ;
 quebrar ;
 caso "canada_post" :
 e = "Posto Canadá" ;
 quebrar ; 
caso "evri" :
 e = "Euri" ;
 quebrar ;
 caso "enviar" :
 e = "Enviar" ;
 quebrar ;
 caso "cronopost" : 
e = "Cronopost" ;
 quebrar ;
 caso "colissimo" :
 e = "Colíssimo" ;
 quebrar ;
 caso "correios" :
 e = "correios" ;
 quebrar ; 
caso "mondial_relay" :
 e = "Relé Mundial" ;
 quebrar ;
 caso "poste_italiane" :
 e = "Poste Italiane" ;
 quebrar ;
 caso "shopify" : 
e = "Shopify" ;
 quebrar ;
 padrão :
 e = "Operadora desconhecida"
 }
 deixe t ;
 if ( i [ s ] . preço == 0 ) { 
t = "Frete GRATUITO"
 } outro {
 t = `$ { isto . conjunto de dados . moeda } $ { i [ s ] . preço } $ { i [ s ] . moeda } ` 
}
 r += ` < label class = "form__label" for = "shipping-${s}" > 
< input type = "radio" name = "shipping-info" id = "shipping-${s}" class = "shippingInfo" value = "${i[s].price}" >
 <div> _ _ 
< span > $ { e } $ { i [ s ] . nome } para < forte > $ { t } </ forte > . </span> _ 
< span > Entrega prevista em $ { i [ s ] . delivery_days [ 0 ] } para $ { i [ s ] . delivery_days [ 1 ] } dias. </span> _ 
</div> _ _
 </ rótulo > `
 }
 esse . wR . HTML interno = r ;
 }
 } ) [ "pegar" ] ( e => { 
se ( e ) {
 esse . eMb . lista de classes . remover ( "oculto" )
 }
 } ) [ "finalmente" ] ( ( ) => { 
esse . eu . lista de classes . alternar ( "oculto" ) ;
 esse . gRb . querySelector ( "span" ) . lista de classes . alternar ( "oculto" )
 } )
 }
 
rTp ( e ) {
 const t = documento. querySelector ( ".totals__subtotal-value" ) || documento. querySelector ( ".totals__valor total" ) ; 
const _mC = isto . conjunto de dados . carrinhoMoneyTotal . dividir ( " " ) ;
 const mC = _mC [ _mC. comprimento - 1 ] 
const r = Matriz. from ( por exemplo, currentTarget . querySelectorAll ( "input" ) ) . encontrar ( e => e. verificado ) . valor ; 
const i = ( parseInt ( este . cT ) + parseInt ( r. substituir ( "." , "" ) ) ) / 100 ;
 deixe a = "" ; 
if ( r == 0 ) a = "GRÁTIS" ;

 função pFm ( preço , moeda ) {
 var fm = novo Intl. NumberFormat ( 'en-US' , {
 estilo : 'moeda' , 
moeda : moeda ,
 } ) ;

 retorno fm. formato ( preço ) ;
 }
 
t. innerHTML = ` < strong > $ { pFm ( i , mC ) } </ strong >< small > com $ { a } frete </ small > ` ; 
documento. querySelector ( ".nota fiscal" ) . textContent = "Impostos calculados na finalização da compra"
 }

 rOp ( ) { 
const t = documento. querySelector ( ".totals__subtotal-value" ) || documento. querySelector ( ".totals__valor total" ) ;
 t. innerHTML = `$ { isto . conjunto de dados . carrinhoMoneyTotal } ` 
documento. querySelector ( ".nota fiscal" ) . textContent = "Impostos e frete calculados na finalização da compra"
 }

 cF ( e ) {
 deixe t ; 
if ( e. zip ) t = `Por favor $ { s ( e. zip [ 0 ] ) } .` ; 
if ( e. país ) t = `$ { e. país [ 0 ] } ` ;

 função s ( e ) { 
retornar e. charAt ( 0 ) . toLowerCase ( ) + e. fatia ( 1 )
 }
 esse . eMb . lista de classes . remover ( "oculto" ) ; 
esse . eMb . textoConteúdo = t
 }
 }
 elementos personalizados. define ( "calculadora de envio" , e ) ;
 </roteiro> _
 <estilo> _
 . cart__footer frete - calculadora {
 largura : 40rem ;
 } 
frete - formulário de calculadora {
 largura máxima : 30rem ;
 largura : 100 %;
 }
 frete - calculadora. selecione {
 margem : 0 0,6em 0,5em 0 ;
 largura : 100 %;
 }
 . formulário__rótulo { 
display : bloco embutido ;
 margem inferior : 0,6rem ;
 }
 . Informação de Envio {
 transformar : traduzirY ( 2px ) ;
 }
 . obter - taxas. botão {
 largura : 100 %; 
margem : 1rem 0 2rem ;
 }
 . wrapper - resposta {
 exibição : flexível ;
 flex - direction : coluna ;
 justificar - conteúdo : centro ;
 }
 . carregando - overlay__spinner. calculadora - círculo do carregador. caminho { 
acidente vascular cerebral : branco ;
 }
 . wrapper - intervalo de resposta {
 display : bloco embutido ;
 }
 . formulário__rótulo {
 exibição : flexível ;
 espaço em branco : nowrap ;
 lacuna : 5px ;
 alinhar - itens : flex - start ; 
}
 . wrapper - resposta div {
 display : bloco embutido ;
 largura : 100 %;
 espaço em branco : normal ;
 }
 . totais__subtotal - valor pequeno {
 espaço em branco : nowrap ;
 } 
h2. totais__subtotal {
 espaço em branco : nowrap ;
 }
 @media ( largura máxima : 750px ) {
 . cart__footer frete - calculadora {
 largura : 100 %;
 }
 envio - calculadora h3 , 
. erro - mensagem - caixa ,
 frete - formulário de calculadora {
 largura máxima : 36rem ;
 margem : automática ;
 exibição : bloco ;
 }
 . wrapper - resposta {
 preenchimento : 0 1rem ;
 largura : 100 %; 
}
 }
 </ estilo >
 { % fim se % }

4. Precisamos colocar esta calculadora de frete em nossa página de carrinho. Abra main-cart-footer.liquid na pasta Section . Consulte a imagem abaixo onde colar o código. Certifique-se de SALVAR.

{% render "shipping-calculator", cart_total: cart.total_price %}

calculadora de frete

5. Em seguida, vá para a pasta de configuração e abra settings_schema.json. Antes do último "]", clique em enter para ter uma nova linha e coloque o código abaixo. Certifique-se de SALVAR.

 , { 
"name" : "Calculadora de taxas de envio" ,
 "configurações" : [
 {
 "tipo" : "caixa de seleção" ,
 "id" : "calculadora_de envio" ,
 "label" : "Mostrar a calculadora de frete?" , 
"padrão" : verdadeiro
 } ,
 {
 "tipo" : "texto" ,
 "id" : "shipping_calculator_heading" ,
 "label" : "Texto do título" ,
 "default" : "Obter estimativas de envio"
 } , 
{
 "tipo" : "texto" ,
 "id" : "shipping_calculator_default_country" ,
 "label" : "Seleção de país padrão" ,
 "info" : "Se o cliente estiver logado, o país do cliente será selecionado." ,
 "default" : "Austrália" 
} ,
 {
 "tipo" : "texto" ,
 "id" : "shipping_calculator_submit_button_label" ,
 "label" : "Etiqueta do botão Enviar" ,
 "default" : "Calcular frete"
 }
 ]
 }

Essas configurações estarão disponíveis quando você for ao Editor de temas e clicar em Configurações .

Certifique-se de ir para Configurações > Mercado > Ativar remessa internacional, se necessário. Sem isso, a calculadora não funcionará se você tentar inserir o CEP internacional.

É isso (",)

0 comentários

Deixe um comentário