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

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


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