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.
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.
- <?php
- //adciona criterio de filtro tipo endereço $filter = new TCriteria;
- $filter->add(new TFilter('id', '>','3'));
- //adciona criterio de filtro categoria natureza juridica
- $filter2 = new TCriteria;
- $filter2->add(new TFilter('id', '<', '0'));
- //adciona criterio de filtro categoria natureza juridica
- $filter3 = new TCriteria;
- $filter3->add(new TFilter('id', '<', '0'));
- $tipo1 = new TDBCombo('tipo1[]',self::$database,'TipoEndereco','id','{nome}','id',$filter);
- $tipo2 = new TDBCombo('tipo2[]',self::$database,'TipoContato','id','{nome}','id',$filter2);
- $tipo3 = new TDBCombo('tipo3[]',self::$database,'Tipo','id','{tipo->nome}','id',$filter3);
- $valor = new TEntry('value[]');
- $tipo1->setDefaultOption(false);
- $tipo2->setDefaultOption(false);
- $tipo3->setDefaultOption(false);
- $tipo1->setChangeAction( new TAction( array($this, 'onChangeAction')) );
- $tipo2->setChangeAction( new TAction( array($this, 'onChangeAction2')) );
- /cria lista de opções
- $this->fieldlist = new TFieldList;
- $this->fieldlist->width = '100%';
- $this->fieldlist->name = 'contato_list';
- $this->fieldlist->addField( '<b>Tipo 1</b>',$tipo1,['width' => '25%']);
- $this->fieldlist->addField( '<b>Tipo 2</b>',$tipo2,['width' => '25%']);
- $this->fieldlist->addField( '<b>Tipo 3</b>',$tipo3,['width' => '25%']);
- $this->fieldlist->addField( '<b>Valor</b>',$valor, ['width' => '25%']);
- //adiciona lista de campos ( contato ao formulário )
- $this->form->addField($tipo1);
- $this->form->addField($tipo2);
- $this->form->addField($tipo3);
- $this->form->addField($valor);
- //Habilita função de ordenação
- $this->fieldlist->enableSorting();
- //adiciona lista ao formulário
- $row = $this->form->addFields([$this->fieldlist]);
- public static function onChangeAction($param)
- {
- if (!empty($param['tipo1']))
- {
- $input_id = $param['_field_id'];//id do field tipo_contato_id
- $input_tipo = explode('_', $input_id);//valor do campo tipo_id
- $tipo1 = $param['_field_value'];//apenas o código
- $unique_id = end($input_tipo);
- try
- {
- $criteria = TCriteria::create( ['tipo_endereco_id' => $tipo1 ] );
- //categoria_juridica_id = parametro chave estrangeira da tabela master
- //formname,field(nome do campo),database , nome da model,key,value,ordercolumn = NULL,criteria, startEmpty = FALSE
- TDBCombo::reloadFromModel(self::$formName,'tipo2[]',self::$database,'TipoContato','id','{nome}','id',$criteria,TRUE);
- }
- catch (Exception $e)
- {
- new TMessage('error', $e->getMessage());
- }
- }
- else
- {
- TCombo::clearField(self::$formName,'tipo2[]'); //reload do formulario na segunda combo "tipo2_"
- }
- }
- public static function onChangeAction2($param)
- {
- if (!empty($param['tipo2']))
- {
- $input_id = $param['_field_id'];//id do field tipo_contato_id
- $input_tipo = explode('_', $input_id);//valor do campo tipo_id
- $tipo2 = $param['_field_value'];//apenas o código
- $unique_id = end($input_tipo);
- try
- {
- //$criteria1 = TCriteria::create( ['tipo1' => $tipo2 ] );
- $criteria = new TCriteria;
- $criteria->add(new TFilter('tipo_contato_id', '=', $tipo2));
- //categoria_juridica_id = parametro chave estrangeira da tabela master
- //formname,field(nome do campo),database , nome da model,key,value,ordercolumn = NULL,criteria, startEmpty = FALSE
- TDBCombo::reloadFromModel(self::$formName,'tipo3[]',self::$database,'Tipo','id','{tipo->nome}','id',$criteria1,TRUE);
- }
- catch (Exception $e)
- {
- new TMessage('error', $e->getMessage());
- }
- }
- }
- public function fireEvents($object)
- {
- $obj = new stdClass;
- if(get_class($obj) == 'stdClass')
- {
- if (!empty($object))
- {
- foreach ($object as $value)
- {
- if($value)
- {
- $obj->tipo1 = $value->tipo_endereco_id;
- $obj->tipo2 = $value->tipo_contato_id;
- $obj->tipo3 = $value->tipo_id;
- $obj->value = $value->value;
- }
- else
- {
- $obj->tipo1 = $value->tipo_endereco_id;
- $obj->tipo2 = $value->tipo_contato_id;
- $obj->tipo3 = $value->tipo_id;
- $obj->value = $value->value;
- }
- }
- }
- }
- TForm::sendData(self::$formName, $obj);
- }
- ?>
Pessoal, Resolvido
Pessoal.
Achei que tinha resolvido,mas não funcionou.
Alguém consegue identificar o problema.
O que mudou quando vc usou o $unique_id ?
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
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:
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.
Segue link do video
https://vimeo.com/302955776
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
}
João Vitor,
Não entendi.
Ola, ainda não consegui resolver este problema.
Alguém ai pode me ajudar ?