Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Populando Datagrid dentro de um View Bom dia pessoal, estou com a seguinte dificuldade: Estou tentando carregar uma datagrid dentro de um View. Seria um form populado que deveria carregar o histórico de observações em uma aba appendPage do objeto carregado. Ele está montando e exibindo a estrutura, porém não estou conseguindo exibir os registros das observações, que está desta forma: este é o codigo do view ...
RK
Populando Datagrid dentro de um View  
Bom dia pessoal, estou com a seguinte dificuldade:

Estou tentando carregar uma datagrid dentro de um View. Seria um form populado que deveria carregar o histórico de observações em uma aba appendPage do objeto carregado.
Ele está montando e exibindo a estrutura, porém não estou conseguindo exibir os registros das observações, que está desta forma:

este é o codigo do view
  1. <?php
  2.     $this->form->appendPage("Observações");
  3.     $this->form->addContent([new TFormSeparator("Observações do Produto"'#333333''18''#eeeeee')]);
  4.     // datagrid observaçoes
  5.     $this->datagridobs = new BootstrapDatagridWrapper(new TDataGrid);
  6.     $this->datagridobs->width '100%';
  7.     $this->datagridobs->addColumn( new TDataGridColumn('observacoes->user->name',  'Usuário',  'left''25%') );
  8.     $this->datagridobs->addColumn( new TDataGridColumn('observacoes->datahorabr',  'Data/Hora',  'left''15%') );
  9.     $this->datagridobs->addColumn( new TDataGridColumn('observacoes->obs''Obs',  'left''60%') );
  10.     $this->datagridobs->createModel();
  11.     $this->pageNavigationobs = new TPageNavigation;
  12.     $this->pageNavigationobs->setAction(new TAction(array($this'onReload')));
  13.     $this->form->addContent([$this->datagridobs]);
  14.     $this->form->addContent([$this->pageNavigationobs]);
  15. ?>


este é o código do model
  1. <?php
  2. public function get_observacoes()
  3.     {
  4.         $criteria = new TCriteria;
  5.         $criteria->add(new TFilter('produto_id''='$this->id)); // filtra apenas as observações do produto 
  6.         return ProdutosObs::getObjects$criteria );
  7.     }
  8. ?>


o model da classe ProdutosObs
  1. <?php 
  2. public function __construct($id NULL$callObjectLoad TRUE)
  3.     {
  4.         parent::__construct($id$callObjectLoad);
  5.         parent::addAttribute('datahora');
  6.         parent::addAttribute('user_id');
  7.         parent::addAttribute('produto_id');
  8.         parent::addAttribute('obs');
  9.             
  10.     }
  11. public function get_datahorabr()
  12.     {
  13.         return date("d/m/Y H:i:s"strtotime($this->datahora))   ;
  14.     }
  15. public function set_user(SystemUser $object)
  16.     {
  17.         $this->user $object;
  18.         $this->user_id $object->id;
  19.     }
  20. public function get_user()
  21.     {
  22.         if (empty($this->user))
  23.             $this->user = new SystemUser($this->user_id);
  24.         return $this->user;
  25.     }
  26. ?>


Eu fazia isso de uma forma diferente, mas acho muito trabalhoso (foreach em divs no TTextDisplay)
Acredito que estou chamando de forma errada porém não consigo ver.
Caso alguém tenha alguma sugestão agradeço.

abs

Rafael Koller

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (2)


NR

A funçaõ get_observacoes está retornando um array, então você não pode usá-la diretamente como coluna da grid. Se a função onReload está buscando as observações, as colunas da grid podem apontar diretamente para os atributos:
  1. <?php
  2. $this->datagridobs->addColumn( new TDataGridColumn('user->name',  'Usuário',  'left''25%') );
  3. $this->datagridobs->addColumn( new TDataGridColumn('datahorabr',  'Data/Hora',  'left''15%') );
  4. $this->datagridobs->addColumn( new TDataGridColumn('obs''Obs',  'left''60%') );
  5. // on Reload deve ser parecida com isso
  6. $objects ProdutosObs::getObjects$criteria );
  7. ...
  8. foreach ($objects as $object){
  9.     ...
  10.     $this->datagridobs->addItem($object);
  11. }
  12. ?>
RK

Valeu Nataniel!!
Era isso mesmo.
Obrigado pela ajuda e por compartilhar sua expertise.