RB
Campos multi values não é preenchido
Ola,
Criei um formulário com campos multi values( Endereços) porém os campos não são preenchidos com retorno do método ( onCep), não estou conseguindo identificar o erro, se alguém puder me ajudar agradeço.
Segue código abaixo.
Criei um formulário com campos multi values( Endereços) porém os campos não são preenchidos com retorno do método ( onCep), não estou conseguindo identificar o erro, se alguém puder me ajudar agradeço.
Segue código abaixo.
- <?php
- public function __construct($param){
- parent::__construct($param);
- parent::include_css('app/resources/builder.css');
- $this->form = new BootstrapFormBuilder('frm_cliente_fisico');
- $this->form->setFormTitle('Cliente');
- $this->form->class='frm_cliente_fisico';
- //cria dados de correspondência
- $lbl_endereco = new TLabel('Endereco');
- $lbl_endereco->class='lbl_titulo';
- $lbl_cep = new TLabel('Cep');
- //$this->cep = new TEntry('cep');
- $lbl_logradouro = new TLabel('Logradouro');
- $lbl_bairro = new TLabel('Bairro');
- $lbl_cidade = new TLabel('Cidade');
- $lbl_uf = new TLabel('UF');
- $lbl_tipo_endereco_id = new TLabel('Tipo Endereco');
- $lbl_numero = new TLabel('Número');
- $lbl_complemento = new TLabel('Complemento');
- $this->detail_row_1 = 0;
- $this->table_endereco = new TTable();
- $this->table_endereco->width='100%';
- $this->table_endereco->addSection('thead');
- $this->frame_endereco = new TFrame;
- $this->frame_endereco->style='border:none;float:lef; margin-left:-15px;';
- $this->frame_endereco->add($lbl_endereco);
- $this->frame_endereco->add($this->table_endereco);
- $this->table_endereco->addRowSet([$lbl_cep,$lbl_logradouro,$lbl_bairro,$lbl_cidade,$lbl_uf,$lbl_tipo_endereco_id,$lbl_numero,$lbl_complemento]);
- $this->form->addContent([$this->frame_endereco]);
- //method onCep()
- public static function onCep($param){
- $endereco_cep = $param['cep_'];
- $endereco_cep = explode('_', $endereco_cep);
- $unique_id = end($input_pieces);
- $endereco = Endereco::BuscaCep($endereco_cep);
- if (!empty($endereco ))
- {
- $response = new stdClass;
- $response->{'logradouro_'.$unique_id} = strtoupper( $endereco['logradouro']);
- $response->{'bairro_'.$unique_id} = $endereco['bairro'];
- $response->{'cidade_'.$unique_id} = $endereco['localidade'];
- $response->{'uf_'.$unique_id} = $endereco['uf'];
- //$obj->logradouro = strtoupper( $retorno['logradouro']);
- //$obj->bairro = strtoupper( $retorno['bairro']);
- //$obj->cidade = strtoupper( $retorno['localidade']);
- //$obj->uf = strtoupper( $retorno['uf']);
- //$obj->ibge = strtoupper( $retorno['ibge']);
- //$obj->gia = strtoupper( $retorno['gia']);
- TForm::sendData('frm_cliente_fisico', $response);
- TScript::create('$("input[name=numero]").focus();');
- }
- else {
- new TMessage("error", "CEP - Em Branco ou Inválido");
- }
- }
- public function addEnderecoRow($param){
- $uniqid = mt_rand(1000000, 9999999);
- $btn_cep = new TButton('btn_cep');
- $btn_cep->setSize(42);
- $btn_cep->setAction(new TAction(array($this,'onCep')),'');
- $btn_cep->setImage('fa:search blue');
- $this->form->addFields([$btn_cep]);
- $this->cep = new TEntry('cep[]');
- $this->cep->setMask('00000-000');
- $this->cep->addValidation('CEP', new TRequiredValidator, new TMaxValueValidator,array(8));
- $logradouro = new TEntry('logradouro[]');
- $bairro = new TEntry('bairro[]');
- $cidade = new TEntry('cidade[]');
- $uf = new TEntry('uf[]');
- $numero = new TEntry('numero[]');
- $tipo_endereco_id = new TDBCombo('tipo_endereco_id[]','centinel','TipoEndereco','id','descricao');
- $tipo_endereco_id->setDefaultOption(false);
- $complemento = new TEntry('complemento[]');
- // set row counter
- $this->cep->{'data-row'} = $this->detail_row_1;
- $logradouro->{'data-row'} = $this->detail_row_1;
- $bairro->{'data-row'} = $this->detail_row_1;
- $cidade->{'data-row'} = $this->detail_row_1;
- $numero->{'data-row'} = $this->detail_row_1;
- $uf->{'data-row'} = $this->detail_row_1;
- $tipo_endereco_id->{'data-row'} = $this->detail_row_1;
- $complemento->{'data-row'} = $this->detail_row_1;
- //set ids
- $this->cep->setId('cep_'.$uniqid);
- $btn_cep->setId('btn_cep)'.$uniqid);
- $logradouro->setId('logradouro_'.$uniqid);
- $bairro->setId('bairro_'.$uniqid);
- $cidade->setId('cidade_'.$uniqid);
- $uf->setId('uf_'.$uniqid);
- $numero->setId('numero_'.$uniqid);
- $tipo_endereco_id->setId('tipo_endereco_id_'.$uniqid);
- $complemento->setId('complemento_'.$uniqid);
- // create delete button
- $del_endereco = new TImage('fa:trash-o blue');
- $del_endereco->onclick = 'ttable_remove_row(this)';
- $row_end = $this->table_endereco->addRowSet([$this->cep,$btn_cep,$logradouro,$bairro,$cidade,$uf,$tipo_endereco_id,$numero,$complemento,$del_endereco]);
- $row_end->{'data-row'} = $this->detail_row_1;
- $this->cep->setSize('70');
- $logradouro->setSize('200');
- $bairro->setSize('150');
- $cidade->setSize('150');
- $uf->setSize('40');
- $numero->setSize('70');
- $complemento->setSize('150');
- $tipo_endereco_id->setSize('100');
- $this->detail_row_1 ++;
- }
- public static function BuscaCep($Cep)
- {
- $Cep = preg_replace("/D/","", $Cep);
- if ($Cep != "")
- {
- $resultado = simplexml_load_string( @file_get_contents("http://viacep.com.br/ws/".$Cep."/xml/"));
- $erro = (string) $resultado->erro;
- if ( !$erro )
- {
- $objects['cep'] = (string) $resultado->cep;
- $objects['ibge'] = (string) $resultado->ibge;
- $objects['gia'] = (string) $resultado->gia;
- $objects['logradouro'] = (string) $resultado->logradouro;
- $objects['complemento'] = (string) $resultado->complemento;
- $objects['bairro'] = (string) $resultado->bairro;
- $objects['localidade'] = (string) $resultado->localidade;
- $objects['uf'] = (string) $resultado->uf;
- $objects['unidade'] = (string) $resultado->unidade;
- return $objects;
- } else return FALSE;
- } else return FALSE;
- }
- ?>
Rubens, habilite a visualização de logs do PHP, você vai ver vários notices que ajudam a identificar os problemas.
Como você está usando master detail vetorial, aconselho a utilizar a função setExitAction diretamente no campo CEP, ao invés de ter um botão para preencher os dados. Usando a exitAction você consegue obter o id e o valor do campo, algo que seria mais complicado de obter utilizando o botão.
Faça a troca para usar setExitAction no campo cep e deixe sua função onCep da seguinte maneira:
Nataniel Rabaioli,
Mais uma vez, muito obrigado .
Funcionou perfeito .
Abraço.