Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Combos vetoriais Olá, pessoal Tenho 3 combos (vetoriais) em um forme, porém estou com o seguinte problema, ao adicionar a segunda linha e escolher os item os valores das combos da primeira linha é alterado. Segue trecho do código abaixo. ...
RB
Combos vetoriais  
Olá, pessoal

Tenho 3 combos (vetoriais) em um forme, porém estou com o seguinte problema, ao adicionar a segunda linha e escolher os item os valores das combos da primeira linha é alterado.

Segue trecho do código abaixo.

  1. <?php
  2. //adciona criterio de filtro tipo endereço    $filter = new TCriteria;
  3.     $filter->add(new TFilter('id''>','3'));
  4.     //adciona criterio de filtro categoria natureza juridica
  5.     $filter2 = new TCriteria;
  6.     $filter2->add(new TFilter('id''<''0'));
  7.     //adciona criterio de filtro categoria natureza juridica
  8.     $filter3 = new TCriteria;
  9.     $filter3->add(new TFilter('id''<''0'));
  10.     $tipo1 = new TDBCombo('tipo1[]',self::$database,'TipoEndereco','id','{nome}','id',$filter);
  11.     $tipo2 = new TDBCombo('tipo2[]',self::$database,'TipoContato','id','{nome}','id',$filter2);
  12.     $tipo3 = new TDBCombo('tipo3[]',self::$database,'Tipo','id','{tipo->nome}','id',$filter3);
  13.       $valor = new TEntry('value[]');
  14.     $tipo1->setDefaultOption(false);
  15.     $tipo2->setDefaultOption(false);
  16.     $tipo3->setDefaultOption(false);
  17.     $tipo1->setChangeAction( new TAction( array($this'onChangeAction')) );
  18.     $tipo2->setChangeAction( new TAction( array($this'onChangeAction2')) );
  19. /cria lista de opções
  20.     $this->fieldlist = new TFieldList;
  21.     $this->fieldlist->width '100%';
  22.     $this->fieldlist->name  'contato_list';
  23.     $this->fieldlist->addField'<b>Tipo 1</b>',$tipo1,['width' => '25%']);
  24.     $this->fieldlist->addField'<b>Tipo 2</b>',$tipo2,['width' => '25%']);
  25.     $this->fieldlist->addField'<b>Tipo 3</b>',$tipo3,['width' => '25%']);
  26.     $this->fieldlist->addField'<b>Valor</b>',$valor, ['width' => '25%']);
  27.       //adiciona lista de campos ( contato ao formulário )
  28.     $this->form->addField($tipo1);
  29.     $this->form->addField($tipo2);
  30.     $this->form->addField($tipo3);
  31.     $this->form->addField($valor);
  32.     //Habilita função de ordenação
  33.     $this->fieldlist->enableSorting();
  34.       //adiciona lista ao formulário
  35.     $row $this->form->addFields([$this->fieldlist]);
  36. public static function onChangeAction($param)
  37.   {
  38.     if (!empty($param['tipo1']))
  39.     {
  40.       $input_id $param['_field_id'];//id do field tipo_contato_id
  41.       $input_tipo explode('_'$input_id);//valor do campo tipo_id
  42.       $tipo1 $param['_field_value'];//apenas o código
  43.       $unique_id end($input_tipo);
  44.       try
  45.       {
  46.         $criteria TCriteria::create( ['tipo_endereco_id' => $tipo1 ] );
  47.         //categoria_juridica_id = parametro chave estrangeira da tabela master
  48.         //formname,field(nome do campo),database , nome da model,key,value,ordercolumn = NULL,criteria, startEmpty = FALSE
  49.         TDBCombo::reloadFromModel(self::$formName,'tipo2[]',self::$database,'TipoContato','id','{nome}','id',$criteria,TRUE);
  50.       }
  51.       catch (Exception $e)
  52.       {
  53.         new TMessage('error'$e->getMessage());
  54.       }
  55.     }
  56.     else
  57.     {
  58.       TCombo::clearField(self::$formName,'tipo2[]'); //reload do formulario na segunda combo "tipo2_"
  59.     }
  60.   }
  61.   public static function onChangeAction2($param)
  62.   {
  63.     if (!empty($param['tipo2']))
  64.     {
  65.       $input_id $param['_field_id'];//id do field tipo_contato_id
  66.       $input_tipo explode('_'$input_id);//valor do campo tipo_id
  67.       $tipo2 $param['_field_value'];//apenas o código
  68.       $unique_id end($input_tipo);
  69.       try
  70.       {
  71.         //$criteria1 = TCriteria::create( ['tipo1' => $tipo2 ] );
  72.         $criteria = new TCriteria;
  73.         $criteria->add(new TFilter('tipo_contato_id''='$tipo2));
  74.         //categoria_juridica_id = parametro chave estrangeira da tabela master
  75.         //formname,field(nome do campo),database , nome da model,key,value,ordercolumn = NULL,criteria, startEmpty = FALSE
  76.         TDBCombo::reloadFromModel(self::$formName,'tipo3[]',self::$database,'Tipo','id','{tipo->nome}','id',$criteria1,TRUE);
  77.       }
  78.       catch (Exception $e)
  79.       {
  80.         new TMessage('error'$e->getMessage());
  81.       }
  82.     }
  83.   }
  84.   public function fireEvents($object)
  85.   {
  86.     $obj = new stdClass;
  87.     if(get_class($obj) == 'stdClass')
  88.     {
  89.       if (!empty($object))
  90.       {
  91.         foreach ($object as $value)
  92.         {
  93.           if($value)
  94.           {
  95.             $obj->tipo1 $value->tipo_endereco_id;
  96.             $obj->tipo2 $value->tipo_contato_id;
  97.             $obj->tipo3 $value->tipo_id;
  98.             $obj->value $value->value;
  99.           }
  100.           else
  101.           {
  102.             $obj->tipo1 $value->tipo_endereco_id;
  103.             $obj->tipo2 $value->tipo_contato_id;
  104.             $obj->tipo3 $value->tipo_id;
  105.             $obj->value $value->value;
  106.           }
  107.         }
  108.       }
  109.     }
  110.     TForm::sendData(self::$formName$obj);
  111.   }
  112. ?>

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 (10)


RB

Pessoal, Resolvido

  1. <?php
  2. //Linha 57
  3. TDBCombo::reloadFromModel(self::$formName,'tipo2_'.$unique_id,self::$database,'TipoContato','id','{nome}','id',$criteria,TRUE);
  4. //Linha 86
  5. TDBCombo::reloadFromModel(self::$formName,'tipo3_'.$unique_id,self::$database,'Tipo','id','{tipo->nome}','id',$criteria1,TRUE);
  6. ?>
RB

Pessoal.

Achei que tinha resolvido,mas não funcionou.

Alguém consegue identificar o problema.
JR

O que mudou quando vc usou o $unique_id ?
RB

João,

Os dados do primeiro e segundo combo não são preenchidos com as informações do banco ao editar ao editar

ap.imagensbrasil.org/image/q5C9Im
NR

Na função onChangeAction você também precisa passar o id do campo ao invés do nome "tipo2[]", senão no onchange da combo 1 todas as combos 2 serão recarregadas, pois possuem o mesmo nome:
  1. <?php
  2. //onChangeAction
  3. TDBCombo::reloadFromModel(self::$formName,'tipo2[]',self::$database,'TipoContato','id','{nome}','id',$criteria,TRUE);
  4. ?>
RB

Natanael,

Eu fiz desta forma, porém ao selecionar uma opção no combo da linha de baixo, os dados da linha de cima são limpos.

Veja como esta o código que estou utilizando.

O problema é na hora de editar os dados, a segunda combo e terceira não é preenchida.

  1. <?php
  2. public static function onChangeAction($param)
  3.   {
  4.     if (!empty($param['tipo1']))
  5.     {
  6.       $input_id $param['_field_id'];//id do field tipo_contato_id
  7.       $tipo1 $param['_field_value'];//apenas o código
  8.       $input_tipo explode('_'$input_id);//valor do campo tipo_id
  9.       $unique_id end($input_tipo);
  10.       try
  11.       {
  12.         $criteria TCriteria::create( ['tipo_endereco_id' => $tipo1 ] );
  13.         //tipo_endereco_id = parametro chave estrangeira da tabela master
  14.         //formname,field(nome do campo),database , nome da model,key,value,ordercolumn = NULL,criteria, startEmpty = FALSE
  15.         TDBCombo::reloadFromModel(self::$formName,'tipo2_'.$unique_id,self::$database,'TipoContato','id','{nome}','id',$criteria,TRUE);
  16.       }
  17.       catch (Exception $e)
  18.       {
  19.         new TMessage('error'$e->getMessage());
  20.       }
  21.     }
  22.     else
  23.     {
  24.       TCombo::clearField(self::$formName,'tipo2_'.$unique_id); //reload do formulario na segunda combo "tipo2_"
  25.     }
  26.   }
  27.   public static function onChangeAction2($param)
  28.   {
  29.     if (!empty($param['tipo2']))
  30.     {
  31.       $input_id $param['_field_id'];//id do field tipo_contato_id
  32.       $input_tipo explode('_'$input_id);//valor do campo tipo_id
  33.       $tipo2 $param['_field_value'];//apenas o código
  34.       $unique_id end($input_tipo);
  35.       try
  36.       {
  37.         $criteria1 TCriteria::create( ['tipo_contato_id' => $tipo2 ] );
  38.         //tipo_contato_id = parametro chave estrangeira da tabela master
  39.         //formname,field(nome do campo),database , nome da model,key,value,ordercolumn = NULL,criteria, startEmpty = FALSE
  40.         TDBCombo::reloadFromModel(self::$formName,'tipo3_'.$unique_id,self::$database,'Tipo','tipo_contato_id','{tipo->nome}','tipo_contato_id',$criteria1,TRUE);
  41.       }
  42.       catch (Exception $e)
  43.       {
  44.         new TMessage('error'$e->getMessage());
  45.       }
  46.     }
  47.     else
  48.     {
  49.       TCombo::clearField(self::$formName,'tipo3_'.$unique_id); //reload do formulario na segunda combo "tipo3_"
  50.     }
  51.   }
  52.   public function fireEvents($object)
  53.   {
  54.     $input_id $param['_field_id'];//id do field tipo_contato_id
  55.     $input_tipo explode('_'$input_id);//valor do campo tipo_id
  56.     $tipo2 $param['_field_value'];//apenas o código
  57.     $unique_id end($input_tipo);
  58.     if (!empty($object))
  59.     {
  60.       $obj = new stdClass;
  61.       if(get_class($obj) == 'stdClass')
  62.       {
  63.         foreach ($object as $row => $value)
  64.         {
  65.           if($value)
  66.           {
  67.             $obj->{'tipo1_'.$unique_id} = $value->tipo_endereco_id[$row];
  68.             $obj->{'tipo2_'.$unique_id} = $value->tipo_contato_id[$row];
  69.             $obj->{'tipo3_'.$unique_id} = $value->tipo_id[$row];
  70.             $obj->{'value_'.$unique_id} = $value->value[$row];
  71.           }
  72.           else
  73.           {
  74.             $obj->{'tipo1_'.$unique_id} = $value->tipo_endereco_id[$row];
  75.             $obj->{'tipo2_'.$unique_id} = $value->tipo_contato_id[$row];
  76.             $obj->{'tipo3_'.$unique_id} = $value->tipo_id[$row];
  77.             $obj->{'value_'.$unique_id} = $value->value[$row];
  78.           }
  79.         }
  80.       }
  81.     }
  82.     TForm::sendData(self::$formName$obj);
  83.   }
  84. ?>

RB

Segue link do video


https://vimeo.com/302955776
JR

no js do Adianti (components.min.js) na função tcombo_clear falta aceitar o campo por id
como nas outras functions de tcombo.
ex:
if ($("#" + t).length > 0) {
var t = "#" + t
}
RB

João Vitor,

Não entendi.

RB

Ola, ainda não consegui resolver este problema.

Alguém ai pode me ajudar ?