menu
Fórum Adianti
menu Menu
UTILIZANDO CEP "NÃO" CORREIOS Novamente os Correios Brasileiros alteraram a forma para a busca de CEP's em sua Base de Dados, como alternativa deixo abaixo um código para substituir em seus formulários. Comentando o Código: Como podem ver trata-se de um função que através de um link traz um "$resultado" $param['PRO_CEP'] - é um campo TEntry criado para a digitação do CEP PRO_CEP e outros parecidos são...
MC
UTILIZANDO CEP "NÃO" CORREIOS  
Novamente os Correios Brasileiros alteraram a forma para a busca de CEP's em sua Base de Dados, como alternativa deixo abaixo um código para
substituir em seus formulários.


Comentando o Código:

Como podem ver trata-se de um função que através de um link traz um "$resultado"

$param['PRO_CEP'] - é um campo TEntry criado para a digitação do CEP

PRO_CEP e outros parecidos são os campos que receberão as informações de retorno.

form_TblProprietario é o nome dado ao meu Formulário $this->form = new TForm('form_TblProprietario');


  1. <?php
  2.     /* 
  3.      *  Função de busca de Endereço pelo CEP 
  4.      *  -   Desenvolvido Felipe Olivaes para ajaxbox.com.br 
  5.      *  -   Utilizando WebService de CEP da republicavirtual.com.br 
  6.      */  
  7.     public function onCep($param)
  8.     {
  9.         $resultado = @file_get_contents('http://republicavirtual.com.br/web_cep.php?cep='.urlencode($param['PRO_CEP']).'&formato=query_string');  
  10.         if(!$resultado){  
  11.             $resultado "&resultado=0&resultado_txt=erro+ao+buscar+cep";  
  12.         }  
  13.         parse_str($resultado$retorno);   
  14.         $obj = new StdClass;
  15.         $obj->PRO_CEP      $param['PRO_CEP'];
  16.         $obj->PRO_ENDERECO strtoupper$retorno['tipo_logradouro'].' '.$retorno['logradouro']);
  17.         $obj->PRO_BAIRRO   strtoupper$retorno['bairro']);
  18.         $obj->PRO_CIDADE   strtoupper$retorno['cidade']);
  19.         $obj->PRO_UF       strtoupper$retorno['uf']); 
  20.         TForm::sendData('form_TblProprietario'$obj);
  21.     }
  22. ?>



Espero ter ajudado.

Abraços

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (13)


WR

Show de bola Marcos!!

Parabéns!!!
MF

Marco,

Tipo de coisa muito util pra quem desenvolve.

Obrigado pela sua postagem.
RM

Bom dia

Vocês poderiam compartilhar o formulário funcionando? Estou iniciando no adianti, e não estou conseguindo implementar... Obrigado
RM

Bom dia

Vocês poderiam compartilhar o formulário funcionando? Estou iniciando no adianti, e não estou conseguindo implementar... Obrigado
RM

Criei um teste da seguinte forma antes de aplicar no meu form.

  1. <?php
  2. /**
  3.  * EnderecoForm Form
  4.  * @author  <your name here>
  5.  */
  6. class EnderecoForm extends TPage
  7. {
  8.     protected $form// form
  9.     
  10.     /**
  11.      * Form constructor
  12.      * @param $param Request
  13.      */
  14.     public function __construct$param )
  15.     {
  16.         parent::__construct();
  17.         
  18.         // creates the form
  19.         $this->form = new TQuickForm('form_Endereco');
  20.         $this->form->class 'tform'// change CSS class
  21.         $this->form = new BootstrapFormWrapper($this->form);
  22.         $this->form->style 'display: table;width:100%'// change style
  23.         
  24.         // define the form title
  25.         $this->form->setFormTitle('Endereco');
  26.         
  27.         // create the form fields
  28.         $id = new TEntry('id');
  29.         $cep = new TEntry('cep');
  30.         $tipo_lougradouro = new TEntry('tipo_lougradouro');
  31.         $lougradouro = new TEntry('lougradouro');
  32.         $bairro = new TEntry('bairro');
  33.         $cidade = new TEntry('cidade');
  34.         $uf = new TEntry('uf');
  35.         // add the fields
  36.         $this->form->addQuickField('Id'$id,  100 );
  37.         $this->form->addQuickField('Cep'$cep,  200 );
  38.         $this->form->addQuickField('Tipo Lougradouro'$tipo_lougradouro,  200 );
  39.         $this->form->addQuickField('Lougradouro'$lougradouro,  200 );
  40.         $this->form->addQuickField('Bairro'$bairro,  200 );
  41.         $this->form->addQuickField('Cidade'$cidade,  200 );
  42.         $this->form->addQuickField('Uf'$uf,  200 );
  43.         if (!empty($id))
  44.         {
  45.             $id->setEditable(FALSE);
  46.             $tipo_lougradouro->setEditable(FALSE);
  47.             $lougradouro->setEditable(FALSE);
  48.             $bairro->setEditable(FALSE);
  49.             $cidade->setEditable(FALSE);
  50.             $uf->setEditable(FALSE);
  51.         }
  52.         
  53.         /** samples
  54.          $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
  55.          $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  56.          $fieldX->setSize( 100, 40 ); // set size
  57.          **/
  58.          
  59.         // create the form actions
  60.         $this->form->addQuickAction(_t('Buscar Endereco'), new TAction(array($this'onCep')), 'fa:floppy-o'); 
  61.         $this->form->addQuickAction(_t('Save'), new TAction(array($this'onSave')), 'fa:floppy-o');
  62.         $this->form->addQuickAction(_t('New'),  new TAction(array($this'onClear')), 'bs:plus-sign green');
  63.         
  64.         // vertical box container
  65.         $container = new TVBox;
  66.         $container->style 'width: 90%';
  67.         // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  68.         $container->add(TPanelGroup::pack('Title'$this->form));
  69.         
  70.         parent::add($container);
  71.     }
  72.     
  73.     
  74.      /* 
  75.      *  Função de busca de Endereço pelo CEP 
  76.      *  -   Desenvolvido Felipe Olivaes para ajaxbox.com.br 
  77.      *  -   Utilizando WebService de CEP da republicavirtual.com.br 
  78.      */
  79.     public function onCep($param)
  80.     {
  81.         $resultado = @file_get_contents('http://republicavirtual.com.br/web_cep.php?cep='.urlencode($param['PRO_CEP']).'&formato=query_string');  
  82.         if(!$resultado){  
  83.             $resultado "&resultado=0&resultado_txt=erro+ao+buscar+cep";  
  84.         }  
  85.         parse_str($resultado$retorno);   
  86.         $obj = new StdClass;
  87.         $obj->PRO_CEP      $param['PRO_CEP'];
  88.         $obj->PRO_ENDERECO strtoupper$retorno['tipo_logradouro'].' '.$retorno['logradouro']);
  89.         $obj->PRO_BAIRRO   strtoupper$retorno['bairro']);
  90.         $obj->PRO_CIDADE   strtoupper$retorno['cidade']);
  91.         $obj->PRO_UF       strtoupper$retorno['uf']); 
  92.         TForm::sendData('form_TblProprietario'$obj);
  93.     }
  94.     
  95.     /**
  96.      * Save form data
  97.      * @param $param Request
  98.      */
  99.     public function onSave$param )
  100.     {
  101.         try
  102.         {
  103.             TTransaction::open('sample'); // open a transaction
  104.             
  105.             /**
  106.             // Enable Debug logger for SQL operations inside the transaction
  107.             TTransaction::setLogger(new TLoggerSTD); // standard output
  108.             TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  109.             **/
  110.             
  111.             $this->form->validate(); // validate form data
  112.             
  113.             $object = new Endereco;  // create an empty object
  114.             $data $this->form->getData(); // get form data as array
  115.             $object->fromArray( (array) $data); // load the object with data
  116.             $object->store(); // save the object
  117.             
  118.             // get the generated id
  119.             $data->id $object->id;
  120.             
  121.             $this->form->setData($data); // fill form data
  122.             TTransaction::close(); // close the transaction
  123.             
  124.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  125.         }
  126.         catch (Exception $e// in case of exception
  127.         {
  128.             new TMessage('error'$e->getMessage()); // shows the exception error message
  129.             $this->form->setData$this->form->getData() ); // keep form data
  130.             TTransaction::rollback(); // undo all pending operations
  131.         }
  132.     }
  133.     
  134.     /**
  135.      * Clear form data
  136.      * @param $param Request
  137.      */
  138.     public function onClear$param )
  139.     {
  140.         $this->form->clear();
  141.     }
  142.     
  143.     /**
  144.      * Load object to form data
  145.      * @param $param Request
  146.      */
  147.     public function onEdit$param )
  148.     {
  149.         try
  150.         {
  151.             if (isset($param['key']))
  152.             {
  153.                 $key $param['key'];  // get the parameter $key
  154.                 TTransaction::open('sample'); // open a transaction
  155.                 $object = new Endereco($key); // instantiates the Active Record
  156.                 $this->form->setData($object); // fill the form
  157.                 TTransaction::close(); // close the transaction
  158.             }
  159.             else
  160.             {
  161.                 $this->form->clear();
  162.             }
  163.         }
  164.         catch (Exception $e// in case of exception
  165.         {
  166.             new TMessage('error'$e->getMessage()); // shows the exception error message
  167.             TTransaction::rollback(); // undo all pending operations
  168.         }
  169.     }
  170. }
  171. </code>
</your>
RM

Mandei o código errado... :(

  1. <?php
  2. /**
  3.  * EnderecoForm Form
  4.  * @author  <your name here>
  5.  */
  6. class EnderecoForm extends TPage
  7. {
  8.     protected $form// form
  9.     
  10.     /**
  11.      * Form constructor
  12.      * @param $param Request
  13.      */
  14.     public function __construct$param )
  15.     {
  16.         parent::__construct();
  17.         
  18.         // creates the form
  19.         $this->form = new TQuickForm('form_Endereco');
  20.         $this->form->class 'tform'// change CSS class
  21.         $this->form = new BootstrapFormWrapper($this->form);
  22.         $this->form->style 'display: table;width:100%'// change style
  23.         
  24.         // define the form title
  25.         $this->form->setFormTitle('Endereco');
  26.         
  27.         // create the form fields
  28.         $id = new TEntry('id');
  29.         $PRO_CEP = new TEntry('PRO_CEP');
  30.         $PRO_ENDERECO = new TEntry('PRO_ENDERECO');
  31.         $PRO_BAIRRO = new TEntry('PRO_BAIRRO');
  32.         $PRO_CIDADE = new TEntry('PRO_CIDADE');
  33.         $PRO_UF = new TEntry('PRO_UF');
  34.         /*
  35.         $tipo_lougradouro = new TEntry('tipo_lougradouro');
  36.         $lougradouro = new TEntry('lougradouro');
  37.         $bairro = new TEntry('bairro');
  38.         $cidade = new TEntry('cidade');
  39.         $uf = new TEntry('uf');
  40.         */
  41.         // add the fields
  42.         $this->form->addQuickField('Id'$id,  100 );
  43.         $this->form->addQuickField('PRO_CEP'$PRO_CEP,  200 );
  44.         $this->form->addQuickField('PRO_ENDERECO'$PRO_ENDERECO,  200 );
  45.         $this->form->addQuickField('PRO_BAIRRO'$PRO_BAIRRO,  200 );
  46.         $this->form->addQuickField('PRO_CIDADE'$PRO_CIDADE,  200 );
  47.         $this->form->addQuickField('PRO_UF'$PRO_UF,  200 );
  48.         /*
  49.         $this->form->addQuickField('Tipo Lougradouro', $tipo_lougradouro,  200 );
  50.         $this->form->addQuickField('Lougradouro', $lougradouro,  200 );
  51.         $this->form->addQuickField('Bairro', $bairro,  200 );
  52.         $this->form->addQuickField('Cidade', $cidade,  200 );
  53.         $this->form->addQuickField('Uf', $uf,  200 );
  54.         */
  55.         if (!empty($id))
  56.         {
  57.             $id->setEditable(FALSE);
  58.             $PRO_ENDERECO->setEditable(FALSE);
  59.             $PRO_BAIRRO->setEditable(FALSE);
  60.             $PRO_BAIRRO->setEditable(FALSE);
  61.             $PRO_CIDADE->setEditable(FALSE);
  62.             $PRO_UF->setEditable(FALSE);
  63.         }
  64.         
  65.         /** samples
  66.          $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
  67.          $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  68.          $fieldX->setSize( 100, 40 ); // set size
  69.          **/
  70.          
  71.         // create the form actions
  72.         $this->form->addQuickAction(_t('Buscar Endereco'), new TAction(array($this'onCep')), 'fa:floppy-o'); 
  73.         $this->form->addQuickAction(_t('Save'), new TAction(array($this'onSave')), 'fa:floppy-o');
  74.         $this->form->addQuickAction(_t('New'),  new TAction(array($this'onClear')), 'bs:plus-sign green');
  75.         
  76.         // vertical box container
  77.         $container = new TVBox;
  78.         $container->style 'width: 90%';
  79.         // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  80.         $container->add(TPanelGroup::pack('Title'$this->form));
  81.         
  82.         parent::add($container);
  83.     }
  84.     
  85.     
  86.      /* 
  87.      *  Função de busca de Endereço pelo CEP 
  88.      *  -   Desenvolvido Felipe Olivaes para ajaxbox.com.br 
  89.      *  -   Utilizando WebService de CEP da republicavirtual.com.br 
  90.      */
  91.     public function onCep($param)
  92.     {
  93.         $resultado = @file_get_contents('http://republicavirtual.com.br/web_cep.php?cep='.urlencode($param['PRO_CEP']).'&formato=query_string');  
  94.         if(!$resultado){  
  95.             $resultado "&resultado=0&resultado_txt=erro+ao+buscar+cep";  
  96.         }  
  97.         parse_str($resultado$retorno);   
  98.         $obj = new StdClass;
  99.         $obj->PRO_CEP      $param['PRO_CEP'];
  100.         $obj->PRO_ENDERECO strtoupper$retorno['tipo_logradouro'].' '.$retorno['logradouro']);
  101.         $obj->PRO_BAIRRO   strtoupper$retorno['bairro']);
  102.         $obj->PRO_CIDADE   strtoupper$retorno['cidade']);
  103.         $obj->PRO_UF       strtoupper$retorno['uf']); 
  104.         TForm::sendData('form_TblProprietario'$obj);
  105.     }
  106.     
  107.     /**
  108.      * Save form data
  109.      * @param $param Request
  110.      */
  111.     public function onSave$param )
  112.     {
  113.         try
  114.         {
  115.             TTransaction::open('sample'); // open a transaction
  116.             
  117.             /**
  118.             // Enable Debug logger for SQL operations inside the transaction
  119.             TTransaction::setLogger(new TLoggerSTD); // standard output
  120.             TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  121.             **/
  122.             
  123.             $this->form->validate(); // validate form data
  124.             
  125.             $object = new Endereco;  // create an empty object
  126.             $data $this->form->getData(); // get form data as array
  127.             $object->fromArray( (array) $data); // load the object with data
  128.             $object->store(); // save the object
  129.             
  130.             // get the generated id
  131.             $data->id $object->id;
  132.             
  133.             $this->form->setData($data); // fill form data
  134.             TTransaction::close(); // close the transaction
  135.             
  136.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  137.         }
  138.         catch (Exception $e// in case of exception
  139.         {
  140.             new TMessage('error'$e->getMessage()); // shows the exception error message
  141.             $this->form->setData$this->form->getData() ); // keep form data
  142.             TTransaction::rollback(); // undo all pending operations
  143.         }
  144.     }
  145.     
  146.     /**
  147.      * Clear form data
  148.      * @param $param Request
  149.      */
  150.     public function onClear$param )
  151.     {
  152.         $this->form->clear();
  153.     }
  154.     
  155.     /**
  156.      * Load object to form data
  157.      * @param $param Request
  158.      */
  159.     public function onEdit$param )
  160.     {
  161.         try
  162.         {
  163.             if (isset($param['key']))
  164.             {
  165.                 $key $param['key'];  // get the parameter $key
  166.                 TTransaction::open('sample'); // open a transaction
  167.                 $object = new Endereco($key); // instantiates the Active Record
  168.                 $this->form->setData($object); // fill the form
  169.                 TTransaction::close(); // close the transaction
  170.             }
  171.             else
  172.             {
  173.                 $this->form->clear();
  174.             }
  175.         }
  176.         catch (Exception $e// in case of exception
  177.         {
  178.             new TMessage('error'$e->getMessage()); // shows the exception error message
  179.             TTransaction::rollback(); // undo all pending operations
  180.         }
  181.     }
  182. }
  183. </code>
</your>
RM

galera funcionou.... não havia colocado o nome do form na função....
MC

Rodrigo, você conseguiu ???

MC

Os nomes dos campos e do formulário você pode alterar da forma que quiser, desde que siga a regra onde o retorno
da função também tenha os mesmos nomes.,

Abraços
RC

Prezados, vi que este metodo pega mais atual, o outro site esta antigo.
Devido a forma q ele retorna, alguem sabe como fazer para usar este site?

https://viacep.com.br/ws/13347394/json/

( o cep vai no lugar do 13347394)

Abraços

MC

Rafah Cardoso, boas.

Segue abaixo um dos códigos possíveis conforme o site dos mesmos.

Uma função que retorna (False) caso o CEP não exista, branco ou inválido

ou

uma array com as informações.

Espero ter ajudado.


  1. <?php
  2.     /* 
  3.      *  By Marco AR Campos
  4.      *  Função de busca de Endereço pelo CEP 
  5.      *  Parametro - &Cep "09210000" 
  6.      *  Retorno   - Array ('cep','logradouro','complemento','bairro','localidade ','uf','unidade','ibge','gia') 
  7.      */  
  8.     public static function BuscaCep($Cep)
  9.     {
  10.         $Cep preg_replace("/\D/",""$Cep);
  11.         if ($Cep != "")
  12.         {        
  13.             $resultado simplexml_load_string( @file_get_contents("http://viacep.com.br/ws/".$Cep."/xml/"));
  14.             
  15.             $erro = (string) $resultado->erro;
  16.             if ( !$erro )
  17.             {
  18.               $objects['cep']         = (string) $resultado->cep;   
  19.               $objects['logradouro']  = (string) $resultado->logradouro;   
  20.               $objects['complemento'] = (string) $resultado->complemento;   
  21.               $objects['bairro']      = (string) $resultado->bairro;   
  22.               $objects['localidade']  = (string) $resultado->localidade;   
  23.               $objects['uf']          = (string) $resultado->uf;   
  24.               $objects['unidade']     = (string) $resultado->unidade;   
  25.               $objects['ibge']        = (string) $resultado->ibge;   
  26.               $objects['gia']         = (string) $resultado->gia;
  27.               
  28.               return $objects;   
  29.               
  30.             } else return FALSE;
  31.         } else return FALSE;       
  32.     }
  33. ?>
RC

Muito bom !!!!

E como eu faria para preencher os campos do meu formulário no adianti? Digitando o cep, clicando no botao e o botao executando a função e preenchendo os campos?

Grato
MC

Rafah Carcoso, boas

Vc poderia usar o exemplo do Rodrigo Machado é lógico fazendo as devidas adaptações (usando o meu ultimo exemplo), neste caso a função iria dentro do form

ou criar uma classe "GERAL" onde você poderia colocar varias funções suas e chama-las dentro do formulário.

neste caso ficaria algo deste tipo:

OBS - No meu exemplo acima a função BuscaCep($Cep) fica numa classe TGeral (Classe criada que contem varias funções)
O que muda é que a função dentro TGeral posso me referenciar a ela em qualquer lugar ou seja, ela se torna reaproveitável.


  1. <?php
  2.     public function onCep($param)
  3.     {
  4.         $retorno TGeral::BuscaCep($param['FOR_CEP']);   
  5.  
  6.         if ( $retorno )
  7.         {   
  8.             $data $this->form->getData();
  9.             $data->FOR_ENDERECO strtoupper$retorno['logradouro']);
  10.             $data->FOR_BAIRRO   strtoupper$retorno['bairro']);
  11.             $data->FOR_CIDADE   strtoupper$retorno['localidade']);
  12.             $data->FOR_UF       strtoupper$retorno['uf']); 
  13.             $this->form->setData($data);
  14.         } 
  15.         else {
  16.             new TMessage("error""CEP - Em Branco ou Inválido");
  17.         }
  18.     }
  19. ?>