PM
Problema para adicionar itens em datagrid
Boa noite galera, estou com dificuldades para colocar/resgatar itens em um datagrid no estilo do datagrid de adicionar programas que tem na pagina de adicionar usuarios do framework. Segui o modelo porém ao clicar para adicionar programas parece q o javascript buga pois o modal de loading pisca na tela e nada acontece. As vezes o item que fica no input de "id do visitante" some o que significa que ele foi adicionado no datagrid porem nao aparece lá.. consigo até salvar no banco mas quando edito o item em vez de aparecer o id e o nome do visitante aparece somente os numeros em sequencia a partir do 1 como se fosse o id mesmo que o id comece com 5 por exemplo e após apagar os registros no banco o cadastro apresenta erro buscando o item 5 no banco...
Alguém aí poderia dar uma força?
Códigos:
-----------
Model Pessoa.class.php - https://pastebin.com/FVTUcd0R
Model PessoaCores.php - https://pastebin.com/pZKZjGiM
Model PessoaVisitante.class.php - https://pastebin.com/erY3JC2B
Control CadastroPessoa.class.php - https://pastebin.com/bdZukNZd
Alguém aí poderia dar uma força?
Códigos:
-----------
Model Pessoa.class.php - https://pastebin.com/FVTUcd0R
Model PessoaCores.php - https://pastebin.com/pZKZjGiM
Model PessoaVisitante.class.php - https://pastebin.com/erY3JC2B
Control CadastroPessoa.class.php - https://pastebin.com/bdZukNZd
Vamos por partes. O primeiro problema parece ter relação com a linha 68, veja que falta um "i" em visitantes:
Assim, quando você executa o comando para criação da linha, a grid não é encontrada:
Faça esse ajuste e veja se funciona
Boa noite Nataniel, funcionou a questao de exibir no datagrid porem quando executo o metodo onEdit aparece no datagrid apenas o id como mostrado na imagem:
i.imgur.com/oCK56yn.png
Sabe dizer oq pode ser? Abraços!
Além disso, não está trazendo as cores ao editar (vem vazio) e da um erro na hora de salvar:
i.imgur.com/MT6DlHC.png
O problema deve estar em
Sua classe "PessoaVisitante" não possui o atributo "nome"
Nesse caso, como eu faria para resgatar o atributo nome da classe Visitantes?
Pelo que vi você já criou a associação no model, então basta referenciá-la:
Boa noite galera, funcionou a questao de mostrar o nome, porem ao editar o cadastro o nome do visitante fica duplicado como mostra a imagem abaixo:
i.imgur.com/mMYQJCn.png
O código do foreach do onEdit é :
$data = array();
foreach ($object->getPessoaVisitantes() as $visitante)
{
$data[$visitante->id] = $visitante->toArray();
$item = new stdClass;
$item->id = $visitante->id;
$item->nome = $visitante->visitante->nome;
$i = new TElement('i');
$i->{'class'} = 'fa fa-trash red';
$btn = new TElement('a');
$btn->{'onclick'} = "__adianti_ajax_exec('class=CadastroPessoa&method=deleteVisitante&id={$visitante->id}');$(this).closest('tr').remove();";
$btn->{'class'} = 'btn btn-default btn-sm';
$btn->add( $i );
$item->delete = $btn;
$tr = $this->visitantes_list->addItem($item);
$tr->{'style'} = 'width: 100%;display: inline-table;';
}
Alguem sabe o motivo da duplicacao de ids?
Acho que pode ter relação com sua função getPessoaVisitantes:
Dentro do foreach, após o load, você está adicionando no array $pessoa_visitantes uma instância de PessoaVisitantante com o campo pessoa_id. Ou seja, está procurando na tabela PessoaVisitante pelo id de outra, por isso deve estar repetindo, pois está carregando dois registros com o mesmo id.
Acredito que você possa retornar instâncias da classe Pessoa mesmo, pois não vejo muito sentido em retornar os dados de uma classe "intermediária".
Nataniel, após as alterações ele me apresentou o erro:
Notice: Trying to get property of non-object in /var/www/html/app/control/sistema/cadastros/teste/CadastroPessoa.class.php on line 267
Notice: Trying to get property of non-object in /var/www/html/app/control/sistema/cadastros/teste/CadastroPessoa.class.php on line 268
Notice: Trying to get property of non-object in /var/www/html/app/control/sistema/cadastros/teste/CadastroPessoa.class.php on line 267
Notice: Trying to get property of non-object in /var/www/html/app/control/sistema/cadastros/teste/CadastroPessoa.class.php on line 268
e essa linha é o foreach:
foreach ($object->getPessoaVisitantes() as $visitante)
{
$data[$visitante->id] = $visitante->toArray();
$item = new stdClass;
$item->id = $visitante->visitante->id;
$item->nome = $visitante->visitante->nome;
$i = new TElement('i');
$i->{'class'} = 'fa fa-trash red';
$btn = new TElement('a');
$btn->{'onclick'} = "__adianti_ajax_exec('class=CadastroPessoa&method=deleteVisitante&id={$visitante->id}');$(this).closest('tr').remove();";
$btn->{'class'} = 'btn btn-default btn-sm';
$btn->add( $i );
$item->delete = $btn;
$tr = $this->visitantes_list->addItem($item);
$tr->{'style'} = 'width: 100%;display: inline-table;';
}
Após isso eu alterei de $item->id = $visitante->visitante->id; para $item->id = $visitante->id; e ele agora lista os 2 visitantes como se fosse a propria pessoa e duplicado no caso de existir 2 visitantes como mostra a imagem:
i.imgur.com/OJFV8kU.png
Fiz confusão, a função getPessoaVisitantes deve retornar um array de objetos da classe Visitante e não Pessoa:
Valeu. aqui funcionou! abraços.