Fórum OpenCart Brasil

Por um e-commerce livre, confiável e profissional

#11021
Olá a todos meu primeiro post aqui....
Bom fiz umas melhorias para que o cep também complete o estado.....
troquei o formato para json então vou postar tudo aqui...
Estou utilizando a última versão no momento, 1.5.1.3.(testado apenas nessa)

no final do catalog\view\theme\default\template\account\register.tpl
Código: Selecionar todos

  <script  type="text/javascript">
$(function(){

    $('input[name="postcode"]').blur(function(){
		//$('#carregando_cep').show(); essa linha é por que coloquei uma imagem de um gif do lado campo para mostrar quando atualizar...
		
        var cep = $.trim($('input[name="postcode"]').val().replace('-', ''));
        $.get('index.php?route=account/register/cepautomatico',{cep: cep},function(endereco){
			var obj = $.parseJSON(endereco)// passei para json então aqui faz o parse e cria o objeto (obj)
            var uf       = obj.uf;
            var bairro   = obj.bairro;
            var cidade   = obj.cidade;
            var endereco = obj.tipo_logradouro+" "+obj.logradouro;
            var res      = obj.resultado;
            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
				$('select[name="zone_id"]').val(uf); //preenche o estado com o ID  zone (estado)
            }
        });
		//$('#carregando_cep').hide(); esconder a imagem de loading
    });
});
</script>
catalog\controller\account\register.php
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=json');
			$endereco=json_decode($output);//IMPORTANTE  o OpenCart trata o array como uma classe!! ( não sabia disso rsrs)
			$this->load->model('localisation/zone');//carrega o modelo que trata as zones.				
//IMPORTANTE  metodo abaixo eu criei...código no bloco abaixo, 30 é o id do país( CONFIRAM SE 30 É O BRASIL PARA VOCÊS), e o uf é o que vem não precisa mexer
	                   $results = $this->model_localisation_zone->getZonesByCountryIdAndCode(30,$endereco->uf);

			$endereco->uf=$results['zone_id'];//troca o uf pelo zone_id
			$output=json_encode($endereco);//encode pro retorno
            $this->response->setOutput(utf8_encode($output), $this->config->get('config_compression'));//já inclui o utf8 pra acentuação...
        }
    }
    // Fim - WebService - Cep automático 

catalog\model\localisation\zone.php
Código: Selecionar todos
/******************Importante esse metódo não vem na instalação eu criei e portanto sem ele não vai funcionar o código acima*****************************/
//só adicionar no fim do arquivo  antes do último } ?>
public function getZonesByCountryIdAndCode($country_id,$code) {	
		
			$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "zone WHERE country_id = '" . (int)$country_id . "' AND  code= '" . $code . "' AND status = '1' ORDER BY name LIMIT 1");
	
			return $query->row;		
	}

Bem simples, mas funcional.
Qualquer problema reportem.
Qualquer melhoria é muito bem vinda!


Edit: adicionar a versão do OpenCart
Editado pela última vez por eestevao em 28 Out 2011, 13:55, em um total de 1 vez.
#11029
eestevao escreveu:Olá a todos meu primeiro post aqui....
Bom fiz umas melhorias para que o cep também complete o estado.....
troquei o formato para json então vou postar tudo aqui...

no final do catalog\view\theme\default\template\account\register.tpl
Código: Selecionar todos

  <script  type="text/javascript">
$(function(){

    $('input[name="postcode"]').blur(function(){
		//$('#carregando_cep').show(); essa linha é por que coloquei uma imagem de um gif do lado campo para mostrar quando atualizar...
		
        var cep = $.trim($('input[name="postcode"]').val().replace('-', ''));
        $.get('index.php?route=account/register/cepautomatico',{cep: cep},function(endereco){
			var obj = $.parseJSON(endereco)// passei para json então aqui faz o parse e cria o objeto (obj)
            var uf       = obj.uf;
            var bairro   = obj.bairro;
            var cidade   = obj.cidade;
            var endereco = obj.tipo_logradouro+" "+obj.logradouro;
            var res      = obj.resultado;
            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
				$('select[name="zone_id"]').val(uf); //preenche o estado com o ID  zone (estado)
            }
        });
		//$('#carregando_cep').hide(); esconder a imagem de loading
    });
});
</script>
catalog\controller\account\register.php
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=json');
			$endereco=json_decode($output);//IMPORTANTE  o OpenCart trata o array como uma classe!! ( não sabia disso rsrs)
			$this->load->model('localisation/zone');//carrega o modelo que trata as zones.				
//IMPORTANTE  metodo abaixo eu criei...código no bloco abaixo, 30 é o id do país( CONFIRAM SE 30 É O BRASIL PARA VOCÊS), e o uf é o que vem não precisa mexer
	                   $results = $this->model_localisation_zone->getZonesByCountryIdAndCode(30,$endereco->uf);

			$endereco->uf=$results['zone_id'];//troca o uf pelo zone_id
			$output=json_encode($endereco);//encode pro retorno
            $this->response->setOutput(utf8_encode($output), $this->config->get('config_compression'));//já inclui o utf8 pra acentuação...
        }
    }
    // Fim - WebService - Cep automático 

catalog\model\localisation\zone.php
Código: Selecionar todos
/******************Importante esse metódo não vem na instalação eu criei e portanto sem ele não vai funcionar o código acima*****************************/
//só adicionar no fim do arquivo  antes do último } ?>
public function getZonesByCountryIdAndCode($country_id,$code) {	
		
			$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "zone WHERE country_id = '" . (int)$country_id . "' AND  code= '" . $code . "' AND status = '1' ORDER BY name LIMIT 1");
	
			return $query->row;		
	}

Bem simples, mas funcional.
Qualquer problema reportem.
Qualquer melhoria é muito bem vinda!

Como faz com minha versão 1.4.9.5 que não tem esse register.tpl ? .... pra qual versão você fez?
#11047
Amigo você tem um exemplo funcionando em alguma loja ? tentei fazer aqui na versão 1.5.1.1 mas não funcionou , gostaria de entender se o que você vez quando o cliente clica em finalizar e abre o cadastro basta ele digitar o cep e o sistema puxa os dados é isso ?
Se for vai ser muito util para todos !!!
Parabens pelo post ! e precisando pode contar comigo !
#11052
Então a loja ainda não está online... mas é exatamente isto.

O cliente vai naquele cadastro (tanto quando finalizar, quanto na hora que entrar no site se escolher cadastrar).
e quando ele preencher o cep ele irá automaticamente preencher a Rua, Bairro, Cidade, Estado, a minha modificação é apenas para preencher o estado, o primeiro post resolve bem sem estado apenas.
#11054
Pessoal ainda nao testei minha versao é 1.5.1.1 mas gostaria de informar que o cliente sabe que tem que digital o CEP promeiro seria interessante mudar o cep de lugar como promeiro item do cadastro, neste caso o processo de cadastro anda muito mais rapido, testei em um link que tem aqui e realmente funcionou caso alguem tenha testado na versão 1.5.1.1 me avise no email asmedrado@hotmail.com que garanto uma retribuicao !!!
Vou tentando aqui se eu conseguir disponibilizo o codigo aqui para todos !!!
Obrigado !
MEdrado - www.mundodoseletros.com.br
#11307
Valeu eestevao o problema nem foi essse na minha versão não funcionou nada eu colocava o cep e nada mudava !!! ainda estou analisando o codigo postado para ver onde errei mas se alguem tiver testado na versão 1.5.1.1 e funcionar posta ai pra gente !!!!!
Obrigado pelo post eestevao vou mudar quando o codigo funcionar !! tem uma versao paga mas só func nos 1.4 !!!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 9