RB
Carregar TFieldList
Olá pessoal,
Tenho a seguinte situação conforme código abaixo. Os dados são retornados porém, só esta carregando o primeiro ( operadora).
Tenho a seguinte situação conforme código abaixo. Os dados são retornados porém, só esta carregando o primeiro ( operadora).
- <?php
- // ....Outros códigos
- //Cria campos dos telefones
- $ddi = new TEntry('ddi[]');
- $ddd = new TEntry('ddd[]');
- $telefone = new TEntry('telefone[]');
- $operadora = new TEntry('operadora[]');
- $tipo_telefone_id = new TDBCombo('tipo_telefone_id[]', self::$database, 'TipoTelefone', 'id', 'nome');
- $portabilidade = new TEntry('portabilidade[]');
- $uf_operadora = new TEntry('uf_operadora[]');
- $regiao_operadora = new TEntry('regiao_operadora[]');
- $telefone->setExitAction(new TAction(array(__CLASS__,'onTelefone')));
- $ddi->setValue('55');
- $ddi->setMask('99');
- $ddd->setValue('11');
- $ddd->setMask('999');
- $ddi->style = 'text-align: center';
- $ddd->style = 'text-align: center';
- $telefone->style = 'text-align: right';
- $ddi->setSize('100%');
- $ddd->setSize('100%');
- $telefone->setSize('100%');
- $operadora->setSize('100%');
- $uf_operadora->setSize('100%');
- $portabilidade->setSize('100%');
- $regiao_operadora->setSize('100%');
- $tipo_telefone_id->setSize('100%');
- //$telefone->setMask('9999-9999');
- $this->form->addField($ddi);
- $this->form->addField($ddd);
- $this->form->addField($telefone);
- $this->form->addField($operadora);
- $this->form->addField($uf_operadora);
- $this->form->addField($portabilidade);
- $this->form->addField($tipo_telefone_id);
- $this->form->addField($regiao_operadora);
- // detail
- $this->telefones_list = new TFieldList;
- $this->telefones_list->generateAria();
- $this->telefones_list->width = '100%';
- $this->telefones_list->class .= ' dashed'; // important
- $this->telefones_list->name = 'telefones_list';
- //$this->telefones_list->enableSorting();
- $this->telefones_list->addField('<b>DDI</b>',$ddi ,['width' => '35px']);
- $this->telefones_list->addField('<b>DDD</b>',$ddd , ['width' => '35px']);
- $this->telefones_list->addField('<b>Número</b>',$telefone,['width' => '10%']);
- $this->telefones_list->addField('<b>Operadora</b>',$operadora, ['width' => '15%']);
- $this->telefones_list->addField('<b>Tipo</b>',$tipo_telefone_id, ['width' => '10%']);
- $this->telefones_list->addField('<b>UF</b>',$uf_operadora, ['width' => '20%']);
- $this->telefones_list->addField('<b>Região</b>',$regiao_operadora, ['width' => '20%']);
- $this->telefones_list->addField('<b>Portabilidade</b>',$portabilidade, ['width' => '10%']);
- // add field list to the form
- //$this->form->addContent([ $this->telefones_list ] );
- $row = $this->form->addFields([$this->telefones_list]);
- $row->layout = ['col-sm-12'];
- public static function onTelefone($param)
- {
- try
- {
- $input_id = $param['_field_id'];
- $value = $param['_field_value'];
- $input_pieces = explode('_', $input_id);
- $unique_id = end($input_pieces);
- if ($retorno = (object)FuncoesUteis::onPesqTelefone($value))
- {
- $obj = new StdClass;
- $obj->{'operadora_'.$unique_id} = $retorno->operadora;
- if(strcmp($retorno->tipo,'Celular'))
- {
- $obj->{'tipo_'.$unique_id} = 2;
- }else{
- $obj->{'tipo_'.$unique_id} = 1;
- }
- $obj->{'portabilidade'.$unique_id} = $retorno->portabilidade;
- $obj->{'uf_operadora'.$unique_id} = $retorno->estado;
- $obj->{'regiao_operadora'.$unique_id} = $retorno->regiao;
- TForm::sendData(self::$formName, $obj, false, false);
- //TScript::create('setTimeout(function() { $("input[name=\'numero\']").focus() }, 1000);');
- echo '<pre>';print_r($retorno);echo '</pre>';
- }
- else
- {
- new TMessage("error", 'Número - '.$value.' Inválido');
- }
- }
- catch (Exception $e){
- new TMessage('error', $e->getMessage());
- }
- }
- //não sei se esta é a melhor forma, porém consegui pegar os dados que preciso
- public static function onPesqTelefone($param)
- {
- if (isset($param))
- {
- $link = 'https://qualoperadora.info/consulta';
- $dados = array
- (
- 'tel'=> preg_replace('/[^0-9]/','',$param)
- );
- $dados = http_build_query($dados,null,"");
- $ch = curl_init($link);
- curl_setopt($ch, CURLOPT_REFERER, $link);
- curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
- curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_POST, true);
- curl_setopt($ch,CURLOPT_POSTFIELDS, $dados);
- $html = curl_exec($ch);
- //$txt = preg_split("/:/", $html);
- $re = '/alt="\w+./m';
- preg_match_all($re, $html, $obj, PREG_SET_ORDER, 0);
- $txt = str_replace(['alt=',''],['',''], $obj[0]);
- $operadora = str_replace('"','',$txt);
- //return $html;
- preg_match_all('/<([^-->]+)>(.*)<\/\1>/U',$html, $matches);
- if ($matches)
- {
- $portabilidade = preg_split("/:/", $matches[2][3]);
- $portabilidade = strip_tags($portabilidade[1]);
- $uf_operadora = preg_split("/:/", $matches[2][4]);
- $uf_operadora = strip_tags($uf_operadora[1]);
- $regiao_operadora = preg_split("/:/", $matches[2][5]);
- $regiao_operadora =strip_tags($regiao_operadora[1]);
- //$object['numero'] = $matches[0][1];
- $object['operadora'] = $operadora[0];
- $object['tipo'] = $matches[2][2];
- $object['portabilidade'] = $portabilidade;
- $object['estado'] = $uf_operadora;
- $object['regiao'] = $regiao_operadora;
- }
- return $object;
- //exit();
- curl_close($ch);
- }
- }
- ?>
Os atributos do objeto enviado ao sendData estão errados. O padrão é nomedocampo + "_" + uniqueid, da mesma forma que fez para o campo operadora. Ex:
Nataniel,
Muito obrigado, repassei varias vezes este código, e não consegui enchergar este detalhe.
Funcionou, mais uma vez obrigado.