Página 1 de 9

[TUTORIAL] CEP automático - Auto Complete (Cadastro)

Enviado: 09 Set 2011, 16:56
por fabioppg
Pessoal,

O intuito de fazer esse tutorial é para que nossa plataforma ser torne cada vez mais eficiente, se destaque, para isso. precisamos colaborar para aumentarmos nossas ferramentas de desenvolvimento !

No Cep automático desenvolvido para Opencart, utilizamos o Webservice da República Virtual (http://www.republicavirtual.com.br/cep/) Pois como todo mundo sabe. o servidor dos correios tem lá suas desvantagens. A republica virtual. comigo, nunca ficou OFF-line. A estatistica de UP-Time é de 99,94%.

Sem a republica virtual, para fazermos uma consulta a base de dados de CEP dos correios atualizada, é um serviço PAGO. Veja no link (http://www.republicavirtual.com.br/cep/)

Além disso a Republica virtual atualiza a base de ceps, e distribue a base livre para download.

Tudo isso gratuitamente ! Eles sobrevivem de doações ... (não faço parte da republica virtual). Mais quem quiser fazer doações para eles, fique avontade !

Mão à obra:

Precisamos de alterar os seguintes arquivos:

Controller:
\catalog\controller\account\create.php

View:
\catalog\view\theme\(seu tema)\template\account\create.tpl

----

No controller (\catalog\controller\account\create.php) inclua no final da classe o método: "cepautomatico":
Código: Selecionar todos
    // Início - WebService - Cep Automático
    public function cepautomatico(){

        if (isset($this->request->get['cep'])){

            $output = @file_get_contents('http://republicavirtual.com.br/web_cep.php?cep='.urlencode($this->request->get['cep']).'&formato=xml');
            $this->response->setOutput($output, $this->config->get('config_compression'));
        }
    }
    // Fim - WebService - Cep automático
Na view (\catalog\view\theme\(seu tema)\template\account\create.tpl) coloque o JavaScript referente à requisição do Webservice:
Código: Selecionar todos
<script>
$(function(){

    $('input[name="postcode"]').blur(function(){
        var cep = $.trim($('input[name="postcode"]').val().replace('-', ''));
        $.get('index.php?route=account/create/cepautomatico',{cep: cep},function(xml){
            var uf       = $(xml).find("uf").text();
            var bairro   = $(xml).find("bairro").text();
            var cidade   = $(xml).find("cidade").text();
            var endereco = $(xml).find("tipo_logradouro").text()+' '+$(xml).find("logradouro").text();
            var res      = $(xml).find("resultado").text();
            if(res){
                $('input[name="address_1"]').val(endereco);  // preenche o campo endereço 1 com o endereço
                $('input[name="city"]').val(cidade);  // preenche o campo cidade
                $('input[name="address_2"]').val(bairro); // preenche o campo emdereço 2 com o bairro
            }
        });
    });


});
</script>


Salve os arquivo e Seja feliz !!!

Bizu:
Se caso você tiver "algum" problema em colocar em sua loja. seja gentil em pedir ajuda, pois diversas vezes nós contribuimos com módulos, tutorias e saimos como o "ruim da história" ... Com isso, vejo, que muita gente esta deixando de contribuir...


Testado em Opencart 1.4.9.X.

Re: [TUTORIAL] CEP AUTOMATICO - AUTO COMPLETE (CADASTRO)

Enviado: 09 Set 2011, 17:05
por Renato Frota
Amigo, parabéns pela contribuição!!

Vou fazer o teste na v. 1.5.1.2 assim que possível.

Re: [TUTORIAL] CEP AUTOMATICO - AUTO COMPLETE (CADASTRO)

Enviado: 09 Set 2011, 22:01
por tonilopes
Olá.
Na versão 1.5.1.2 não existe o arquivo create.php ou o create.tpl.
Tem o arquivo register, porém fiz as alterações e não surgiu nenhum efeito.
obs: fiz o teste no wamp.
obs2: É só colar os trechos de código ou você fez alguma alteração?

Desde já, grato pela atenção!

Toni Lopes

Re: [TUTORIAL] CEP automático - Auto Complete (Cadastro)

Enviado: 11 Set 2011, 04:11
por Manoel Vidal
Parabéns pela iniciativa :D

Re: [TUTORIAL] CEP automático - Auto Complete (Cadastro)

Enviado: 12 Set 2011, 17:02
por analista.bsa
Cara faz um tutorial explicando como fazer no OC Versão 1.5.1 :P

Re: [TUTORIAL] CEP automático - Auto Complete (Cadastro)

Enviado: 12 Set 2011, 17:53
por fabioppg
analista.bsa escreveu:Cara faz um tutorial explicando como fazer no OC Versão 1.5.1 :P
analista.bsa,

A iniciativa foi tomada. porém, somos uma comunidade !

O código atual e suas alterações são bem simples.

Ainda não utilizo 1.5.1, quem precisar adaptar a sua necessidade, fique avontade em modificar.

Só lembre de contribuir à todos aqui também!

Re: [TUTORIAL] CEP automático - Auto Complete (Cadastro)

Enviado: 12 Set 2011, 18:33
por analista.bsa
fabioppg escreveu:
analista.bsa escreveu:Cara faz um tutorial explicando como fazer no OC Versão 1.5.1 :P
analista.bsa,

A iniciativa foi tomada. porém, somos uma comunidade !

O código atual e suas alterações são bem simples.

Ainda não utilizo 1.5.1, quem precisar adaptar a sua necessidade, fique avontade em modificar.

Só lembre de contribuir à todos aqui também!
igualmente nosso amigo acima disse, na versão 1.5.xx não existe o arquivo create.php, create.tpl,

com certeza vou contribuir e já contribui para a comunidade

Re: [TUTORIAL] CEP AUTOMATICO - AUTO COMPLETE (CADASTRO)

Enviado: 13 Set 2011, 09:13
por m.lirangi
Renato Frota escreveu:Amigo, parabéns pela contribuição!!

Vou fazer o teste na v. 1.5.1.2 assim que possível.
Renato, assim q possível vc avisa a gente??!! .. rsrs

Vlw

Re: [TUTORIAL] CEP automático - Auto Complete (Cadastro)

Enviado: 13 Set 2011, 19:34
por guihleao
No controller (\catalog\controller\account\create.php) inclua no final da classe o método: "cepautomatico":
Como faço isso? Colei o codigo que voce passou no arquivo e salvei, mas deu um erro:
Código: Selecionar todos
Parse error: syntax error, unexpected T_PUBLIC in /home/loja/public_html/catalog/controller/account/create.php on line 485

Re: [TUTORIAL] CEP automático - Auto Complete (Cadastro)

Enviado: 14 Set 2011, 18:12
por tonilopes
Olá a todos
Com uma pequena alteração no código, conseguir fazer funcionar no 1.5.1.2, porém não gostei do resultado.
Como não sou programador, não sei como resolver o problema.
O que eu observei: tanto no firefox 6.0.2 como no chrome, as letras acentuadas são trocados por um losango com uma interrogação no centro. Já no ie9, a coisa fica ainda pior.

Pra quem quiser testar e melhor segue como colocar no 1.5.1.2

no arquivo register.php (catalog/controller/account)

localize esse trecho:
Código: Selecionar todos
public function zone() {
		$output = '<option value="">' . $this->language->get('text_select') . '</option>';
		
		$this->load->model('localisation/zone');

    	$results = $this->model_localisation_zone->getZonesByCountryId($this->request->get['country_id']);
        
      	foreach ($results as $result) {
        	$output .= '<option value="' . $result['zone_id'] . '"';
	
	    	if (isset($this->request->get['zone_id']) && ($this->request->get['zone_id'] == $result['zone_id'])) {
	      		$output .= ' selected="selected"';
	    	}
	
	    	$output .= '>' . $result['name'] . '</option>';
    	} 
		
		if (!$results) {
		  	$output .= '<option value="0">' . $this->language->get('text_none') . '</option>';
		}
	
		$this->response->setOutput($output);
  	} 
e cole o texto abaixo logo depois:
Código: Selecionar todos
 // Início - WebService - Cep Automático
    public function cepautomatico(){

        if (isset($this->request->get['cep'])){

            $output = @file_get_contents('http://republicavirtual.com.br/web_cep.php?cep='.urlencode($this->request->get['cep']).'&formato=xml');
            $this->response->setOutput($output, $this->config->get('config_compression'));
        }
    }
    // Fim - WebService - Cep automático 
no arquivo register.tpl (catalog/view/theme/default/template/account)

localize esse trecho:
Código: Selecionar todos
 <?php if ($text_agree) { ?>
    <div class="buttons">
      <div class="right"><?php echo $text_agree; ?>
        <?php if ($agree) { ?>
        <input type="checkbox" name="agree" value="1" checked="checked" />
        <?php } else { ?>
        <input type="checkbox" name="agree" value="1" />
        <?php } ?>
        <a onclick="$('#register').submit();" class="button"><span><?php echo $button_continue; ?></span></a></div>
    </div>
    <?php } else { ?>
    <div class="buttons">
      <div class="right"><a onclick="$('#register').submit();" class="button"><span><?php echo $button_continue; ?></span></a></div>
    </div>
    <?php } ?>
  </form>
  <?php echo $content_bottom; ?></div>
e cole o texto abaixo logo em seguida:
Código: Selecionar todos
<script>
$(function(){

    $('input[name="postcode"]').blur(function(){
        var cep = $.trim($('input[name="postcode"]').val().replace('-', ''));
        $.get('index.php?route=account/register/cepautomatico',{cep: cep},function(xml){
            var uf       = $(xml).find("uf").text();
            var bairro   = $(xml).find("bairro").text();
            var cidade   = $(xml).find("cidade").text();
            var endereco = $(xml).find("tipo_logradouro").text()+' '+$(xml).find("logradouro").text();
            var res      = $(xml).find("resultado").text();
            if(res){
                $('input[name="address_1"]').val(endereco);  // preenche o campo endereço 1 com o endereço
                $('input[name="city"]').val(cidade);  // preenche o campo cidade
                $('input[name="address_2"]').val(bairro); // preenche o campo emdereço 2 com o bairro
            }
        });
    });


});
</script>
e é só fazer os testes.

Quem quiser ver como ficou, pode testar em http://www.megalopes.com.br/upload/inde ... t/register

Eu já vi um módulo pra oscommerce em ajax que é muito bom, pena a linguagem ser tão diferente.

Abraços a todos e espero ter ajudado.

Toni Lopes