MF
TCombo + onChangeAction
Fechado
Boa tarde!
Estou encontrando dificuldades para utilizar a função TCombo::reload('form_Enderecos', 'cidade', $item);
ele recarrega a combo quando quer, é um form de cadastro de endereço e a combo de cidades é feito um reload de com a UF selecionada, porém não está carregando.
Utilizei como base o exemplo: www.adianti.com.br/framework_files/tutor/index.php?class=FormInterac
Grato.
Estou encontrando dificuldades para utilizar a função TCombo::reload('form_Enderecos', 'cidade', $item);
ele recarrega a combo quando quer, é um form de cadastro de endereço e a combo de cidades é feito um reload de com a UF selecionada, porém não está carregando.
Utilizei como base o exemplo: www.adianti.com.br/framework_files/tutor/index.php?class=FormInterac
Grato.
- <?php
- /**
- * EnderecosForm Registration
- * @author <your name here>
- */
- class EnderecosForm extends TWindow
- {
- protected $form; // form
- /**
- * Class constructor
- * Creates the page and the registration form
- */
- function __construct()
- {
- parent::__construct();
- parent::setSize(750, 520);
- // creates the form
- $this->form = new TForm('form_Enderecos');
- $this->form->class = 'tform'; // CSS class
- $this->form->style = 'width: 500px';
- // add a table inside form
- $table = new TTable;
- $table-> width = '100%';
- $this->form->add($table);
- // add a row for the form title
- $row = $table->addRow();
- $row->class = 'tformtitle'; // CSS class
- $row->addCell( new TLabel('Endereços') )->colspan = 2;
- // create the form fields
- $logradouro = new TEntry('logradouro');
- $bairro = new TEntry('bairro');
- $uf = new TCombo('uf');
- $cidade = new TCombo('cidade');
- $cep = new TEntry('cep');
- $complemento = new TEntry('complemento');
- $numero = new TEntry('numero');
- $apto = new TEntry('apto');
- 1149tipo = new TCombo('idtipo');
- //Preenche combo
- $_uf = new Ufs();
- $itens_uf = array();
- $collection_uf = $_uf->get_ufs();
- foreach($collection_uf as $object)
- {
- $itens_uf[$object->iduf] = $object->estado;
- }
- $uf->addItems($itens_uf);
- $classe = new Classe();
- $itens_tipo = array();
- $collection_tipo = $classe->get_enderecos_tipo();
- foreach($collection_tipo as $object)
- {
- $itens_tipo[] = $object['descricao'];
- }
- 1149tipo->addItems($itens_tipo);
- // define the sizes
- $logradouro->setSize(300);
- $bairro->setSize(200);
- $uf->setSize(60);
- $cidade->setSize(200);
- $cep->setSize(200);
- $complemento->setSize(200);
- $numero->setSize(200);
- $apto->setSize(200);
- 1149tipo->setSize(100);
- // add one row for each form field
- $table->addRowSet( new TLabel('Tipo:'), 1149tipo );
- $table->addRowSet( new TLabel('Logradouro:'), $logradouro );
- $table->addRowSet( new TLabel('Número:'), $numero );
- $table->addRowSet( new TLabel('Complemento:'), $complemento );
- $table->addRowSet( new TLabel('Apto:'), $apto );
- $table->addRowSet( new TLabel('Bairro:'), $bairro );
- $table->addRowSet( new TLabel('UF:'), $uf );
- $table->addRowSet( new TLabel('Cidade:'), $cidade );
- $table->addRowSet( new TLabel('CEP:'), $cep );
- $uf_action = new TAction(array($this, 'onChangeAction'));
- $uf->setChangeAction($uf_action);
- $this->form->setFields(array($logradouro,$bairro,$cidade,$uf,$cep,$complemento,$numero,$apto,1149tipo));
- // create the form actions
- $save_button = TButton::create('save', array($this, 'onSave'), _t('Save'), 'ico_save.png');
- $this->form->addField($save_button);
- $buttons_box = new THBox;
- $buttons_box->add($save_button);
- // add a row for the form action
- $row = $table->addRow();
- $row->class = 'tformaction'; // CSS class
- $row->addCell($buttons_box)->colspan = 2;
- parent::add($this->form);
- }
- function onLoad(){}
- public static function onChangeAction($param)
- {
- try
- {
- $object = new StdClass;
- $object->iduf = $param['uf'];
- $ufs = new Ufs;
- $rs = $ufs->get_cidades_uf($object->iduf);
- $item = array();
- foreach($rs as $r)
- {
- $item[] = $r['cidade'];
- }
- TCombo::reload('form_Enderecos', 'cidade', $item);
- }
- catch (Exception $e)
- {
- new TMessage('error',$e->getMessage());
- }
- }
- }
Olhei rápido e percebo que a forma como carrega os dados na combo está "diferente" vc usa os dados de uma tabela? tente seguir esse exemplo www.adianti.com.br/framework_files/tutor/index.php?class=FormDBManua na hora de carregar os dados.
Parece que o metodo tcombo::onreload não consegue interpretar pois ela não tem nada para recarregar.
Sim, estou carregando os dados de uma tabela.
Esse exemplo eu já utilizo para carregar as UFs, ao selecionar a UF a consulta funciona corretamente, tanto que se colocar um var_dump vai mostrar a resposta certo a cada seleção de UF, não estou entendo o pq não preenche a combo da cidade.
da um var_dump no $item dentro da função.
Isso aí.
Outra coisa,
O vetor $item não está indexado:
Att,
Feito!! Funcionou.
Olá,
Estou com este mesmo problema, mas mesmo indexando não consigo fazer funcionar.
Percebi que se eu limitar o número de municípios para 100 funciona normalmente.
Segue o código.
foreach ($municipios as $municipio){
$items[$municipio->id] = $municipio->nome;
}
Grato.
Para muitos dados use TDBMultiSearch.
Olá,
Resolvi o problema.
O TCombo funciona corretamente. O problema é que algumas cidades brasileiras tem aspas simples no nome e isto quebra o script de atualização da página.
Usei um caractere de escape e funcionou.
Oi Matheus Freitas, como você solucionou seu problema? Estou fazendo algo parecido, só que meus campos são categoria (TDBCombo) e subcategoria (TCombo). Quando seleciono uma categoria ele deve trazer as subcategorias relacionadas.
Está salvando normalmente, só que não está carregando de volta no formulário a subcategoria.
Alguém pode me ajudar por favor.
Segue minha classe:
Edilaine,
Habilite os erros do PHP, observe o console do browser.
E use uns var_dump(), para ver se está executando.
Use try/catch e lembre de fechar a transação no onChangeCombo().
Por que você está conectando à base "permission" ?
Não deveria conectar à base de seu projeto?
Att,
Olá Pablo.
Eu criei minhas tabelas nessa mesma base 'permission'!
Coisa de iniciante. Nem me atentei a isso :-)
Estou com um problema no tcombo do theme4, pois ele preenche o combo normalmente, mas na edição não seleciona o valor que vem do banco, alguém sabe o motivo???