deivisonarthur / OSC-Magento-Brasil

O projeto OCS-MAgento-Brasil é uma iniciativa para traduzir e adaptar o módulo free OSC(One Step Checkout) para Magento chamado IWD OnePageCheckout. O módulo irá traduzir, adicionar estados, formatar, validar campos e adicionar novos campos. Irei tratar principalmente os campos: Rua, Bairro, Cidade, Estado, Cep com busca por Ajax com busca nos Correios, CPF/CNPJ, IE(Inscrição Estadual), tipo pessoa, Telefone, Celular,...
43 stars 53 forks source link

Sugestão: Bloquear o formulário quando ocorrer request #47

Open jarjar123 opened 11 years ago

jarjar123 commented 11 years ago

Então, como mencionei em outro post, instalei o módulo OSC recentemente, e achei sensacional. É um módulo bem completo, com pouco acoplamento, e agradeço disponibilizarem como OSL.

Segue uma sugestão de melhoria:

Após poucos testes percebi que a tela de checkout pode se tornar extremamente instável com usuários indecisos. Muita gente clica "a varrer" em botões radio. Com apenas 3 cliques seguidos, sem aguardar o carregamento do restante do formulário, a tela entrou em loop. Achei que os requests acumulados terminariam, mas ficou realmente em loop.

Além disso é possível alterar o CEP, e submeter o formulário com uma cotação inferior, antes que a nova cotação seja carregada. Dessa mesma forma é possível também burlar descontos baseados na forma de pagamento.

Enfim a despeito disso gostaria de sugerir o bloqueio do formulário inteiro, cada vez que houver algum request em ajax. Isso evita que o usuário sobrecarregue o servidor, fazendo requests desnecessários.

É isso, caso eu resolva isso, e seja do agrado da equipe, compartilharei a solução.

Boa semana a todos.

jarjar123 commented 11 years ago

Se interessar a alguém, segue solução.

Durante os requests a tela ficaria como na imagem abaixo. Terminado o request a tela volta ao normal. osc

É só adicionar o seguinte script no final do arquivo onepagecheckout.phtml.

var opcDatafields=document.getElementsByClassName('onepagecheckout_datafields')[0];var opcLock=document.createElement('div');opcLock.setStyle({display:'none',position:'relative',width:'100%',top:'0',left:'0',backgroundColor:'#fff',opacity:'0.7'});opcDatafields.appendChild(opcLock);if(checkout){checkout.setLoadWaiting=function(flag){if(flag){opcLock.setStyle({display:'block',height:opcDatafields.offsetHeight+'px'});var container=$('review-buttons-container');container.addClassName('disabled');container.setStyle({opacity:0.5});this._disableEnableAll(container,true)}else if(this.loadWaiting){opcLock.setStyle({display:'none',height:opcDatafields.offsetHeight+'px'});var container=$('review-buttons-container');container.removeClassName('disabled');container.setStyle({opacity:1});this._disableEnableAll(container,false)}this.loadWaiting=flag}}

deivisonarthur commented 11 years ago

Show de bola brother! Vou testar e se ficar maneiro que acredito que ira, incorporo ao projeto! ;)

Enviado via iPhone

Em 02/03/2013, às 12:23, jarjar123 notifications@github.com escreveu:

Se interessar a alguém, segue solução.

Durante os requests a tela ficaria como na imagem abaixo. Terminado o request a tela volta ao normal.

É só adicionar o seguinte script no final do arquivo onepagecheckout.phtml.

var opcDatafields=document.getElementsByClassName('onepagecheckout_datafields')[0];var opcLock=document.createElement('div');opcLock.setStyle({display:'none',position:'relative',width:'100%',top:'0',left:'0',backgroundColor:'#fff',opacity:'0.7'});opcDatafields.appendChild(opcLock);if(checkout){checkout.setLoadWaiting=function(flag){if(flag){opcLock.setStyle({display:'block',height:opcDatafields.offsetHeight+'px'});var container=$('review-buttons-container');container.addClassName('disabled');container.setStyle({opacity:0.5});this._disableEnableAll(container,true)}else if(this.loadWaiting){opcLock.setStyle({display:'none',height:opcDatafields.offsetHeight+'px'});var container=$('review-buttons-container');container.removeClassName('disabled');container.setStyle({opacity:1});this._disableEnableAll(container,false)}this.loadWaiting=flag}}

— Reply to this email directly or view it on GitHub.

jarjar123 commented 11 years ago

Perdoe a má formatação, mas não sei como inserir código nesse formulário. Se for incorporar no projeto, seria mais elegante apenas atualizar o método setLoadWaiting() no arquivo onepagecheckout.js

deivisonarthur commented 11 years ago

Sim tranks vlw

Enviado via iPhone

Em 02/03/2013, às 12:53, jarjar123 notifications@github.com escreveu:

Perdoe a má formatação, mas não sei como inserir código nesse formulário. Se for incorporar no projeto, seria mais elegante apenas atualizar o método setLoadWaiting() no arquivo onepagecheckout.js

— Reply to this email directly or view it on GitHub.

deivisonarthur commented 11 years ago

Opa pessoal, só para notificar que irei implementar essa função feita pelo amigo jarjar no osc6 e tb importante informar que ela também mudou de nome na atualização que aconteceu da 4.2 e deixa de se chamar disableEnableAll para disableEnableAll. Ou seja, apenas add o na frente dela ;) Vlw jarjar123