Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Erro TDataGrid com DataTable Olá Estou recebendo um erro quando habilito datatable num TDataGrid; Erro conforme imagem anexa....
MG
Erro TDataGrid com DataTable  
Olá

Estou recebendo um erro quando habilito datatable num TDataGrid;

  1. <?php
  2. $this->datagrid->datatable 'true';
  3. ?>


Erro conforme imagem anexa.

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


FC

posta o código todo.
MG

Segue:
  1. <?php
  1. <?php
  2. /**
  3.  * BacklogList Listing
  4.  * @author  Marcelo Gomes 
  5.  */
  6. class BacklogList extends TStandardList
  7. {
  8.     protected $form;     // registration form
  9.     protected $datagrid// listing
  10.     protected $pageNavigation;
  11.     protected $formgrid;
  12.     protected $deleteButton;
  13.     protected $transformCallback;
  14.     
  15.     /**
  16.      * Page constructor
  17.      */
  18.     public function __construct()
  19.     {
  20.         parent::__construct();
  21.         
  22.         parent::setDatabase('projeto');                       // defines the database
  23.         parent::setActiveRecord('Backlog');                   // defines the active record
  24.         parent::setDefaultOrder('projeto_id, data_cadastro''asc');         // defines the default order
  25.         parent::addFilterField('id''like''id'); // filterField, operator, formField
  26.         parent::addFilterField('data_cadastro''like''data_cadastro'); // filterField, operator, formField
  27.         parent::addFilterField('projeto_id''like''projeto_id'); // filterField, operator, formField
  28.         parent::addFilterField('cliente_id''like''cliente_id'); // filterField, operator, formField
  29.         parent::addFilterField('descricao''like''descricao'); // filterField, operator, formField
  30.         parent::addFilterField('situacao_id''like''situacao_id'); // filterField, operator, formField
  31.         
  32.         // creates the form
  33.         $this->form = new TQuickForm('form_search_Backlog');
  34.         $this->form->class 'tform'// change CSS class
  35.         $this->form = new BootstrapFormWrapper($this->form);
  36.         $this->form->style 'display: table;width:100%'// change style
  37.         $this->form->setFormTitle('Backlog');
  38.         $this->form->setFieldsByRow(3);
  39.         
  40.         // create the form fields
  41.         $id = new TEntry('id');
  42.         $data_cadastro = new TEntry('data_cadastro');
  43.         $projeto_id = new TDBCombo('projeto_id','projeto','Projeto','id','descricao');
  44.         $cliente_id = new TDBCombo('cliente_id','projeto','Cliente','id','nome');
  45.         $descricao = new TEntry('descricao');
  46.         $situacao_id = new TDBCombo('situacao_id','projeto','Situacao','id','descricao');
  47.         $situacao_id->setValue('1');
  48.         
  49.         
  50.         // add the fields
  51.         $this->form->addQuickField('Código'$id,  200 );
  52.         $this->form->addQuickField('Data Cadastro'$data_cadastro,  200 );
  53.         $this->form->addQuickField('Nome Projeto'$projeto_id,  200 );
  54.         $this->form->addQuickField('Cliente'$cliente_id,  200 );
  55.         $this->form->addQuickField('Descrição'$descricao,  200 );
  56.         $this->form->addQuickField('Situação'$situacao_id,  200 );
  57.         
  58.         
  59.         // keep the form filled during navigation with session data
  60.         $this->form->setDataTSession::getValue('Backlog_filter_data') );
  61.         
  62.         // add the search form actions
  63.         $this->form->addQuickAction(_t('Find'), new TAction(array($this'onSearch')), 'fa:search');
  64.         $this->form->addQuickAction(_t('New'),  new TAction(array('BacklogForm''onEdit')), 'bs:plus-sign green');
  65.         //$this->form->addQuickAction(_t('Mail'),  new TAction(array($this, 'enviarEmail')), 'bs:plus-sign green');
  66.         
  67.         
  68.         // creates a DataGrid
  69.         $this->datagrid = new TDataGrid;
  70.         //$this->datagrid = new BootstrapDatagridWrapper($this->datagrid);
  71.         $this->datagrid->style 'width: 100%';
  72.         $this->datagrid->setHeight(320);
  73.         $this->datagrid->datatable 'true';
  74.         
  75.         $this->datagrid->setGroupColumn('projeto->descricao''<b>Projeto</b>: <i>{projeto->descricao}</i>');
  76.         
  77.         // creates the datagrid columns
  78.         $column_id = new TDataGridColumn('id''Id''right');
  79.         $column_data_cadastro = new TDataGridColumn('data_cadastro''Data Cadastro''left');
  80.         $column_projeto = new TDataGridColumn('projeto->descricao''Nome Projeto''left');
  81.         $column_cliente = new TDataGridColumn('cliente->nome''Cliente''left');
  82.         $column_descricao = new TDataGridColumn('descricao''Descrição''left');
  83.         $column_observacao = new TDataGridColumn('observacao''Observação''left');
  84.         $column_prioridade = new TDataGridColumn('prioridade''Prioridade''left');
  85.         $column_responsavel = new TDataGridColumn('responsavel''Responsável''left');
  86.         $column_situacao = new TDataGridColumn('situacao->descricao''Situação''left');
  87.         $column_per_conclusao = new TDataGridColumn('per_conclusao','Conclusão','center');
  88.         $column_horas = new TDataGridColumn('horas''Horas''left');
  89.         $column_horas_internas = new TDataGridColumn('horas_internas''Horas''left');
  90.         $column_data_prevista = new TDataGridColumn('data_prevista''Data Prevista''left');
  91.         $column_data_realizada = new TDataGridColumn('data_realizada''Data Realizada''left');
  92.         $column_data_cadastro->setTransformer(array('ApplicationTransformers','formatDate'));
  93.         $column_data_prevista->setTransformer(array('ApplicationTransformers','formatDate'));
  94.         $column_data_realizada->setTransformer(array('ApplicationTransformers','formatDate'));
  95.         $column_horas->setTransformer(array('ApplicationTransformers','formatNumber'));
  96.         $column_prioridade->setTransformer(array($this,'formataPrioridade'));
  97.         
  98.         // adiciona barra de progresso
  99.         $column_per_conclusao->setTransformer(function($column_per_conclusao){
  100.             $bar = new TProgressBar;
  101.             $bar->setMask('<b>{value}%</b>');
  102.             $bar->setValue($column_per_conclusao);
  103.             if ($column_per_conclusao == 100) {
  104.                 $bar->setClass('success');
  105.             } else if ($column_per_conclusao >= 75) {
  106.                 $bar->setClass('info');
  107.             } else if ($column_per_conclusao >= 50){
  108.                 $bar->setClass('warning');
  109.             } else if ($column_per_conclusao 50) {
  110.                 $bar->setClass('danger');
  111.             }
  112.             return $bar;
  113.         });
  114.         
  115.         // add the columns to the DataGrid
  116.         $this->datagrid->addColumn($column_id);
  117.         $this->datagrid->addColumn($column_data_cadastro);
  118.         $this->datagrid->addColumn($column_projeto);
  119.         $this->datagrid->addColumn($column_cliente);
  120.         $this->datagrid->addColumn($column_descricao);
  121.         //$this->datagrid->addColumn($column_observacao);
  122.         $this->datagrid->addColumn($column_prioridade);
  123.         $this->datagrid->addColumn($column_responsavel);
  124.         $this->datagrid->addColumn($column_situacao);
  125.         //$this->datagrid->addColumn($column_aprovado_por);
  126.         //$this->datagrid->addColumn($column_data_aprovacao);
  127.         $this->datagrid->addColumn($column_per_conclusao);
  128.         #dependendo do usuário, exibe ou não horas
  129.         if (TSession::getValue('role') == SystemUser::ROLE_DESENV) {
  130.             $this->datagrid->addColumn($column_horas);
  131.         }
  132.         if (TSession::getValue('role') == SystemUser::ROLE_ADMIN) {
  133.             $this->datagrid->addColumn($column_horas_internas);
  134.         }
  135.         if (TSession::getValue('role') == SystemUser::ROLE_USER) {
  136.             $this->datagrid->addColumn($column_horas_internas);
  137.         }
  138.         
  139.         $this->datagrid->addColumn($column_data_prevista);
  140.         $this->datagrid->addColumn($column_data_realizada);
  141.         
  142.         // create EDIT action
  143.         $action_edit = new TDataGridAction(array('BacklogForm''onEdit'));
  144.         $action_edit->setUseButton(TRUE);
  145.         $action_edit->setButtonClass('btn btn-default');
  146.         $action_edit->setLabel(_t('Edit'));
  147.         $action_edit->setImage('fa:pencil-square-o blue fa-lg');
  148.         $action_edit->setField('id');
  149.         //$action_edit->setDisplayCondition(array($this, 'displayColumn'));
  150.         //$this->datagrid->addAction($action_edit);
  151.         
  152.         // create DELETE action
  153.         $action_del = new TDataGridAction(array($this'onDelete'));
  154.         $action_del->setUseButton(TRUE);
  155.         $action_del->setButtonClass('btn btn-default');
  156.         $action_del->setLabel(_t('Delete'));
  157.         $action_del->setImage('fa:trash-o red fa-lg');
  158.         $action_del->setField('id');
  159.         $action_del->setDisplayCondition(array($this,'displayColumn'));
  160.         //$this->datagrid->addAction($action_del);
  161.         
  162.         
  163.         
  164.         $action_group = new TDataGridActionGroup('Ações','bs:th');
  165.         $action_group->addHeader('Opções Disponíveis');
  166.         $action_group->addAction($action_edit);
  167.         $action_group->addSeparator();
  168.         $action_group->addAction($action_del);
  169.         
  170.         $this->datagrid->addActionGroup($action_group);
  171.         
  172.         // create the datagrid model
  173.         $this->datagrid->createModel();
  174.         
  175.         
  176.         parent::show();
  177.         
  178.         // refaz a busca
  179.         if (!empty($this->situacao_id)) {
  180.             var_dump($this->situacao_id);
  181.             //$this->onSearch();
  182.         }
  183.         
  184.         // create the page navigation
  185.         $this->pageNavigation = new TPageNavigation;
  186.         $this->pageNavigation->setAction(new TAction(array($this'onReload')));
  187.         $this->pageNavigation->setWidth($this->datagrid->getWidth());
  188.         
  189.         // vertical box container
  190.         $container = new TVBox;
  191.         $container->style 'width: 100%';
  192.         // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  193.         $container->add(TPanelGroup::pack('Backlog de Projetos'$this->form));
  194.         $container->add($this->datagrid);
  195.         $container->add($this->pageNavigation);
  196.         
  197.         parent::add($container);
  198.     }
  199.     
  200.     
  201.     /**
  202.      * Verifica se o usuario pode editar ou ver o registro
  203.      * Somente administrador poderá excluir um registro
  204.      */
  205.     public function displayColumn$object )
  206.     {
  207.         if (TSession::getValue('role') != SystemUser::ROLE_ADMIN){
  208.             return FALSE;
  209.         } else {
  210.             return TRUE;
  211.         }
  212.     }
  213.         
  214.     public function enviarEmail() 
  215.     {
  216.         try {
  217.             $ini parse_ini_file('app/config/email.ini');
  218.             
  219.             $mail = new TMail;
  220.             $mail->setDebug(FALSE);
  221.             $mail->setFrom($ini['from'], $ini['name']);
  222.             $mail->setSubject('[Prevencao Riscos] Limpeza Tabela Temp Email Enviado');
  223.             $mail->setHtmlBody('Registros foram removidos...');
  224.             $mail->addAddress('marcelo@mgsistemas.com.br',$ini['name']);
  225.             $mail->SetUseSmtp();
  226.             $mail->SetSmtpHost($ini['host'], $ini['port']);
  227.             $mail->SetSmtpUser($ini['user'], $ini['pass']);
  228.             $mail->setReplyTo($ini['repl']);
  229.             $mail->send();
  230.             new TMessage('info','E-mail enviado com sucesso!');
  231.         } catch (Exception $e) {
  232.             new TMessage('error','Erro : ' $e->getMessage());
  233.         }
  234.     }
  235.         
  236.     /**
  237.      * Metodo que formata a coluna prioridade
  238.      */
  239.     public static function formataPrioridade($value$object$row)
  240.     {
  241.         $retorno "";
  242.         switch ($value){
  243.             case 'A'$retorno "<span class='label label-danger'>Alta</span>";  break;
  244.             case 'M'$retorno "<span class='label label-warning'>Media</span>"; break;
  245.             case 'B'$retorno "<span class='label label-success'>Baixa</span>";break;
  246.         }
  247.         return $retorno;
  248.     }
  249.     
  250.     /**
  251.      * shows the page
  252.      */
  253.     function show()
  254.     {
  255.         $this->onReload();
  256.         parent::show();
  257.     }    
  258.     
  259.     /**
  260.      * method onReload()
  261.      * Load the datagrid with the database objects
  262.      */
  263.     public function onReload($param NULL)
  264.     {
  265.         try
  266.         {
  267.             // open a transaction with database
  268.             TTransaction::open($this->database);
  269.             
  270.             // instancia um repositório
  271.             $repository = new TRepository($this->activeRecord);
  272.             $limit = isset($this->limit) ? ( $this->limit $this->limit NULL) : 10;
  273.             // creates a criteria
  274.             $criteria = isset($this->criteria) ? clone $this->criteria : new TCriteria;
  275.             
  276.             // busca a lista de projetos autorizados, se o papel for diferente de ADMIN
  277.             $arr = array();
  278.             if (TSession::getValue('role') != SystemUser::ROLE_ADMIN) {
  279.                 $projetos UtilMGConsultoria::get_projetos(TSession::getValue('usuarioId'));
  280.                 $in 0;
  281.                 if (count($projetos)) {
  282.                     foreach ($projetos as $proj){
  283.                         array_push($arr,$proj->projeto_id);
  284.                     }
  285.                 }
  286.             }
  287.             
  288.             if ($this->situacao != NULL) {
  289.                 var_dump($this->situacao);
  290.             }
  291.             // adiciona criterio de projetos que podem ser visualizados
  292.             if (count($arr) >0) {
  293.                 $criteria->add(new TFilter('projeto_id','in',$arr), TExpression::AND_OPERATOR);
  294.             }
  295.             
  296.             if ($this->order)
  297.             {
  298.                 $criteria->setProperty('order',     $this->order);
  299.                 $criteria->setProperty('direction'$this->direction);
  300.             }
  301.             $criteria->setProperties($param); // order, offset
  302.             $criteria->setProperty('limit'$limit);
  303.             
  304.             if ($this->formFilters)
  305.             {
  306.                 foreach ($this->formFilters as $filterKey => $filterField)
  307.                 {
  308.                     if (TSession::getValue($this->activeRecord.'_filter_'.$filterField))
  309.                     {
  310.                         // add the filter stored in the session to the criteria
  311.                         $criteria->add(TSession::getValue($this->activeRecord.'_filter_'.$filterField));
  312.                     }
  313.                 }
  314.             }
  315.             
  316.             // load the objects according to criteria
  317.             $objects $repository->load($criteriaFALSE);
  318.             
  319.             if (is_callable($this->transformCallback))
  320.             {
  321.                 call_user_func($this->transformCallback$objects$param);
  322.             }
  323.             
  324.             $this->datagrid->clear();
  325.             if ($objects)
  326.             {
  327.                 // iterate the collection of active records
  328.                 foreach ($objects as $object)
  329.                 {
  330.                     // add the object inside the datagrid
  331.                     $this->datagrid->addItem($object);
  332.                 }
  333.             }
  334.             
  335.             // reset the criteria for record count
  336.             $criteria->resetProperties();
  337.             $count$repository->count($criteria);
  338.             
  339.             if (isset($this->pageNavigation))
  340.             {
  341.                 $this->pageNavigation->setCount($count); // count of records
  342.                 $this->pageNavigation->setProperties($param); // order, page
  343.                 $this->pageNavigation->setLimit($limit); // limit
  344.             }
  345.             
  346.             // close the transaction
  347.             TTransaction::close();
  348.             $this->loaded true;
  349.         }
  350.         catch (Exception $e// in case of exception
  351.         {
  352.             // shows the exception error message
  353.             new TMessage('error'$e->getMessage());
  354.             // undo all pending operations
  355.             TTransaction::rollback();
  356.         }
  357.     }    
  358.     
  359.     
  360.      /**
  361.      * Register the filter in the session
  362.      */
  363.     public function onSearch()
  364.     {
  365.         // get the search form data
  366.         $data $this->form->getData();
  367.         $this->datagrid->clear();
  368.         //var_dump($data);
  369.         
  370.         if ($this->formFilters)
  371.         {
  372.             foreach ($this->formFilters as $filterKey => $formFilter)
  373.             {
  374.                 $operator    = isset($this->operators[$filterKey]) ? $this->operators[$filterKey] : 'like';
  375.                 $filterField = isset($this->filterFields[$filterKey]) ? $this->filterFields[$filterKey] : $formFilter;
  376.                 
  377.                 // check if the user has filled the form
  378.                 if (isset($data->{$formFilter}) AND $data->{$formFilter})
  379.                 {
  380.                     // creates a filter using what the user has typed
  381.                     if (stristr($operator'like'))
  382.                     {
  383.                         $filter = new TFilter($filterField$operator"%{$data->{$formFilter}}%");
  384.                     }
  385.                     else
  386.                     {
  387.                         $filter = new TFilter($filterField$operator$data->{$formFilter});
  388.                     }
  389.                     
  390.                     // stores the filter in the session
  391.                     TSession::setValue($this->activeRecord.'_filter'$filter); // BC compatibility
  392.                     TSession::setValue($this->activeRecord.'_filter_'.$formFilter$filter);
  393.                     TSession::setValue($this->activeRecord.'_'.$formFilter$data->{$formFilter});
  394.                 }
  395.                 else
  396.                 {
  397.                     TSession::setValue($this->activeRecord.'_filter'NULL); // BC compatibility
  398.                     TSession::setValue($this->activeRecord.'_filter_'.$formFilterNULL);
  399.                     TSession::setValue($this->activeRecord.'_'.$formFilter'');
  400.                 }
  401.             }
  402.         }
  403.         
  404.         TSession::setValue($this->activeRecord.'_filter_data'$data);
  405.         
  406.         // fill the form with data again
  407.         $this->form->setData($data);
  408.         
  409.         $param=array();
  410.         $param['offset']    =0;
  411.         $param['first_page']=1;
  412.         $this->onReload($param);
  413.     }
  414.         
  415. }
  416. ?>
MG

Desculpe, no anterior eu postei a versão sem ativar o datatable (tive que desabilitar para não dar erro).
Agora segue o código com erro:

  1. <?php
  1. <?php
  2. /**
  3.  * BacklogList Listing
  4.  * @author Marcelo Gomes
  5.  */
  6. class BacklogList extends TStandardList
  7. {
  8.     protected $form;     // registration form
  9.     protected $datagrid// listing
  10.     protected $pageNavigation;
  11.     protected $formgrid;
  12.     protected $deleteButton;
  13.     protected $transformCallback;
  14.     
  15.     /**
  16.      * Page constructor
  17.      */
  18.     public function __construct()
  19.     {
  20.         parent::__construct();
  21.         
  22.         parent::setDatabase('projeto');                       // defines the database
  23.         parent::setActiveRecord('Backlog');                   // defines the active record
  24.         parent::setDefaultOrder('projeto_id, data_cadastro''asc');         // defines the default order
  25.         // parent::setCriteria($criteria) // define a standard filter
  26.         parent::addFilterField('id''like''id'); // filterField, operator, formField
  27.         parent::addFilterField('data_cadastro''like''data_cadastro'); // filterField, operator, formField
  28.         parent::addFilterField('projeto_id''like''projeto_id'); // filterField, operator, formField
  29.         parent::addFilterField('cliente_id''like''cliente_id'); // filterField, operator, formField
  30.         parent::addFilterField('descricao''like''descricao'); // filterField, operator, formField
  31.         parent::addFilterField('situacao_id''like''situacao_id'); // filterField, operator, formField
  32.         
  33.         // creates the form
  34.         $this->form = new TQuickForm('form_search_Backlog');
  35.         $this->form->class 'tform'// change CSS class
  36.         $this->form = new BootstrapFormWrapper($this->form);
  37.         $this->form->style 'display: table;width:100%'// change style
  38.         $this->form->setFormTitle('Backlog');
  39.         $this->form->setFieldsByRow(3);
  40.         
  41.         // create the form fields
  42.         $id = new TEntry('id');
  43.         $data_cadastro = new TEntry('data_cadastro');
  44.         $projeto_id = new TDBCombo('projeto_id','projeto','Projeto','id','descricao');
  45.         $cliente_id = new TDBCombo('cliente_id','projeto','Cliente','id','nome');
  46.         $descricao = new TEntry('descricao');
  47.         $situacao_id = new TDBCombo('situacao_id','projeto','Situacao','id','descricao');
  48.         $situacao_id->setValue('1');
  49.         
  50.         
  51.         // add the fields
  52.         $this->form->addQuickField('Código'$id,  200 );
  53.         $this->form->addQuickField('Data Cadastro'$data_cadastro,  200 );
  54.         $this->form->addQuickField('Nome Projeto'$projeto_id,  200 );
  55.         $this->form->addQuickField('Cliente'$cliente_id,  200 );
  56.         $this->form->addQuickField('Descrição'$descricao,  200 );
  57.         $this->form->addQuickField('Situação'$situacao_id,  200 );
  58.         
  59.         
  60.         // keep the form filled during navigation with session data
  61.         $this->form->setDataTSession::getValue('Backlog_filter_data') );
  62.         
  63.         // add the search form actions
  64.         $this->form->addQuickAction(_t('Find'), new TAction(array($this'onSearch')), 'fa:search');
  65.         $this->form->addQuickAction(_t('New'),  new TAction(array('BacklogForm''onEdit')), 'bs:plus-sign green');
  66.         //$this->form->addQuickAction(_t('Mail'),  new TAction(array($this, 'enviarEmail')), 'bs:plus-sign green');
  67.         
  68.         
  69.         // creates a DataGrid
  70.         $this->datagrid = new TDataGrid;
  71.         //$this->datagrid = new BootstrapDatagridWrapper($this->datagrid);
  72.         $this->datagrid->style 'width: 100%';
  73.         $this->datagrid->setHeight(320);
  74.         $this->datagrid->datatable 'true';
  75.         
  76.         $this->datagrid->setGroupColumn('projeto->descricao''<b>Projeto</b>: <i>{projeto->descricao}</i>');
  77.         
  78.         // creates the datagrid columns
  79.         $column_id = new TDataGridColumn('id''Id''right');
  80.         $column_data_cadastro = new TDataGridColumn('data_cadastro''Data Cadastro''left');
  81.         $column_projeto = new TDataGridColumn('projeto->descricao''Nome Projeto''left');
  82.         $column_cliente = new TDataGridColumn('cliente->nome''Cliente''left');
  83.         $column_descricao = new TDataGridColumn('descricao''Descrição''left');
  84.         $column_observacao = new TDataGridColumn('observacao''Observação''left');
  85.         $column_prioridade = new TDataGridColumn('prioridade''Prioridade''left');
  86.         $column_responsavel = new TDataGridColumn('responsavel''Responsável''left');
  87.         $column_situacao = new TDataGridColumn('situacao->descricao''Situação''left');
  88.         //$column_aprovado_por = new TDataGridColumn('aprovado_por', 'Aprovado Por', 'left');
  89.         //$column_data_aprovacao = new TDataGridColumn('data_aprovacao', 'Data Aprovação', 'left');
  90.         $column_per_conclusao = new TDataGridColumn('per_conclusao','Conclusão','center');
  91.         $column_horas = new TDataGridColumn('horas''Horas''left');
  92.         $column_horas_internas = new TDataGridColumn('horas_internas''Horas''left');
  93.         $column_data_prevista = new TDataGridColumn('data_prevista''Data Prevista''left');
  94.         $column_data_realizada = new TDataGridColumn('data_realizada''Data Realizada''left');
  95.         $column_data_cadastro->setTransformer(array('ApplicationTransformers','formatDate'));
  96.         //$column_data_aprovacao->setTransformer(array('ApplicationTransformers','formatDate'));
  97.         $column_data_prevista->setTransformer(array('ApplicationTransformers','formatDate'));
  98.         $column_data_realizada->setTransformer(array('ApplicationTransformers','formatDate'));
  99.         $column_horas->setTransformer(array('ApplicationTransformers','formatNumber'));
  100.         $column_prioridade->setTransformer(array($this,'formataPrioridade'));
  101.         
  102.         // adiciona barra de progresso
  103.         $column_per_conclusao->setTransformer(function($column_per_conclusao){
  104.             $bar = new TProgressBar;
  105.             $bar->setMask('<b>{value}%</b>');
  106.             $bar->setValue($column_per_conclusao);
  107.             if ($column_per_conclusao == 100) {
  108.                 $bar->setClass('success');
  109.             } else if ($column_per_conclusao >= 75) {
  110.                 $bar->setClass('info');
  111.             } else if ($column_per_conclusao >= 50){
  112.                 $bar->setClass('warning');
  113.             } else if ($column_per_conclusao 50) {
  114.                 $bar->setClass('danger');
  115.             }
  116.             return $bar;
  117.         });
  118.         
  119.         // add the columns to the DataGrid
  120.         $this->datagrid->addColumn($column_id);
  121.         $this->datagrid->addColumn($column_data_cadastro);
  122.         $this->datagrid->addColumn($column_projeto);
  123.         $this->datagrid->addColumn($column_cliente);
  124.         $this->datagrid->addColumn($column_descricao);
  125.         //$this->datagrid->addColumn($column_observacao);
  126.         $this->datagrid->addColumn($column_prioridade);
  127.         $this->datagrid->addColumn($column_responsavel);
  128.         $this->datagrid->addColumn($column_situacao);
  129.         //$this->datagrid->addColumn($column_aprovado_por);
  130.         //$this->datagrid->addColumn($column_data_aprovacao);
  131.         $this->datagrid->addColumn($column_per_conclusao);
  132.         #dependendo do usuário, exibe ou não horas
  133.         if (TSession::getValue('role') == SystemUser::ROLE_DESENV) {
  134.             $this->datagrid->addColumn($column_horas);
  135.         }
  136.         if (TSession::getValue('role') == SystemUser::ROLE_ADMIN) {
  137.             $this->datagrid->addColumn($column_horas_internas);
  138.         }
  139.         if (TSession::getValue('role') == SystemUser::ROLE_USER) {
  140.             $this->datagrid->addColumn($column_horas_internas);
  141.         }
  142.         
  143.         $this->datagrid->addColumn($column_data_prevista);
  144.         $this->datagrid->addColumn($column_data_realizada);
  145.         
  146.         // create EDIT action
  147.         $action_edit = new TDataGridAction(array('BacklogForm''onEdit'));
  148.         $action_edit->setUseButton(TRUE);
  149.         $action_edit->setButtonClass('btn btn-default');
  150.         $action_edit->setLabel(_t('Edit'));
  151.         $action_edit->setImage('fa:pencil-square-o blue fa-lg');
  152.         $action_edit->setField('id');
  153.         //$action_edit->setDisplayCondition(array($this, 'displayColumn'));
  154.         //$this->datagrid->addAction($action_edit);
  155.         
  156.         // create DELETE action
  157.         $action_del = new TDataGridAction(array($this'onDelete'));
  158.         $action_del->setUseButton(TRUE);
  159.         $action_del->setButtonClass('btn btn-default');
  160.         $action_del->setLabel(_t('Delete'));
  161.         $action_del->setImage('fa:trash-o red fa-lg');
  162.         $action_del->setField('id');
  163.         $action_del->setDisplayCondition(array($this,'displayColumn'));
  164.         //$this->datagrid->addAction($action_del);
  165.         
  166.         
  167.         
  168.         $action_group = new TDataGridActionGroup('Ações','bs:th');
  169.         $action_group->addHeader('Opções Disponíveis');
  170.         $action_group->addAction($action_edit);
  171.         $action_group->addSeparator();
  172.         $action_group->addAction($action_del);
  173.         
  174.         $this->datagrid->addActionGroup($action_group);
  175.         
  176.         // create the datagrid model
  177.         $this->datagrid->createModel();
  178.         
  179.         
  180.         parent::show();
  181.         
  182.         // refaz a busca
  183.         if (!empty($this->situacao_id)) {
  184.             var_dump($this->situacao_id);
  185.             //$this->onSearch();
  186.         }
  187.         
  188.         // create the page navigation
  189.         $this->pageNavigation = new TPageNavigation;
  190.         $this->pageNavigation->setAction(new TAction(array($this'onReload')));
  191.         $this->pageNavigation->setWidth($this->datagrid->getWidth());
  192.         
  193.         // vertical box container
  194.         $container = new TVBox;
  195.         $container->style 'width: 100%';
  196.         // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  197.         $container->add(TPanelGroup::pack('Backlog de Projetos'$this->form));
  198.         $container->add($this->datagrid);
  199.         $container->add($this->pageNavigation);
  200.         
  201.         parent::add($container);
  202.     }
  203.     
  204.     
  205.     /**
  206.      * Verifica se o usuario pode editar ou ver o registro
  207.      * Somente administrador poderá excluir um registro
  208.      */
  209.     public function displayColumn$object )
  210.     {
  211.         if (TSession::getValue('role') != SystemUser::ROLE_ADMIN){
  212.             return FALSE;
  213.         } else {
  214.             return TRUE;
  215.         }
  216.     }
  217.         
  218.     public function enviarEmail() 
  219.     {
  220.         try {
  221.             $ini parse_ini_file('app/config/email.ini');
  222.             
  223.             $mail = new TMail;
  224.             $mail->setDebug(FALSE);
  225.             $mail->setFrom($ini['from'], $ini['name']);
  226.             $mail->setSubject('[Prevencao Riscos] Limpeza Tabela Temp Email Enviado');
  227.             $mail->setHtmlBody('Registros foram removidos...');
  228.             $mail->addAddress('marcelo@mgsistemas.com.br',$ini['name']);
  229.             $mail->SetUseSmtp();
  230.             $mail->SetSmtpHost($ini['host'], $ini['port']);
  231.             $mail->SetSmtpUser($ini['user'], $ini['pass']);
  232.             $mail->setReplyTo($ini['repl']);
  233.             $mail->send();
  234.             new TMessage('info','E-mail enviado com sucesso!');
  235.         } catch (Exception $e) {
  236.             new TMessage('error','Erro : ' $e->getMessage());
  237.         }
  238.     }
  239.         
  240.     /**
  241.      * Metodo que formata a coluna prioridade
  242.      */
  243.     public static function formataPrioridade($value$object$row)
  244.     {
  245.         $retorno "";
  246.         switch ($value){
  247.             case 'A'$retorno "<span class='label label-danger'>Alta</span>";  break;
  248.             case 'M'$retorno "<span class='label label-warning'>Media</span>"; break;
  249.             case 'B'$retorno "<span class='label label-success'>Baixa</span>";break;
  250.         }
  251.         return $retorno;
  252.     }
  253.     
  254.     /**
  255.      * shows the page
  256.      */
  257.     function show()
  258.     {
  259.         $this->onReload();
  260.         parent::show();
  261.     }    
  262.     
  263.     /**
  264.      * method onReload()
  265.      * Load the datagrid with the database objects
  266.      */
  267.     public function onReload($param NULL)
  268.     {
  269.         try
  270.         {
  271.             // open a transaction with database
  272.             TTransaction::open($this->database);
  273.             
  274.             // instancia um repositório
  275.             $repository = new TRepository($this->activeRecord);
  276.             $limit = isset($this->limit) ? ( $this->limit $this->limit NULL) : 10;
  277.             // creates a criteria
  278.             $criteria = isset($this->criteria) ? clone $this->criteria : new TCriteria;
  279.             
  280.             // busca a lista de projetos autorizados, se o papel for diferente de ADMIN
  281.             $arr = array();
  282.             if (TSession::getValue('role') != SystemUser::ROLE_ADMIN) {
  283.                 $projetos UtilMGConsultoria::get_projetos(TSession::getValue('usuarioId'));
  284.                 $in 0;
  285.                 if (count($projetos)) {
  286.                     foreach ($projetos as $proj){
  287.                         array_push($arr,$proj->projeto_id);
  288.                     }
  289.                 }
  290.             }
  291.             
  292.             if ($this->situacao != NULL) {
  293.                 var_dump($this->situacao);
  294.             }
  295.             // adiciona criterio de projetos que podem ser visualizados
  296.             if (count($arr) >0) {
  297.                 $criteria->add(new TFilter('projeto_id','in',$arr), TExpression::AND_OPERATOR);
  298.             }
  299.             
  300.             if ($this->order)
  301.             {
  302.                 $criteria->setProperty('order',     $this->order);
  303.                 $criteria->setProperty('direction'$this->direction);
  304.             }
  305.             $criteria->setProperties($param); // order, offset
  306.             $criteria->setProperty('limit'$limit);
  307.             
  308.             if ($this->formFilters)
  309.             {
  310.                 foreach ($this->formFilters as $filterKey => $filterField)
  311.                 {
  312.                     if (TSession::getValue($this->activeRecord.'_filter_'.$filterField))
  313.                     {
  314.                         // add the filter stored in the session to the criteria
  315.                         $criteria->add(TSession::getValue($this->activeRecord.'_filter_'.$filterField));
  316.                     }
  317.                 }
  318.             }
  319.             
  320.             // load the objects according to criteria
  321.             $objects $repository->load($criteriaFALSE);
  322.             
  323.             if (is_callable($this->transformCallback))
  324.             {
  325.                 call_user_func($this->transformCallback$objects$param);
  326.             }
  327.             
  328.             $this->datagrid->clear();
  329.             if ($objects)
  330.             {
  331.                 // iterate the collection of active records
  332.                 foreach ($objects as $object)
  333.                 {
  334.                     // add the object inside the datagrid
  335.                     $this->datagrid->addItem($object);
  336.                 }
  337.             }
  338.             
  339.             // reset the criteria for record count
  340.             $criteria->resetProperties();
  341.             $count$repository->count($criteria);
  342.             
  343.             if (isset($this->pageNavigation))
  344.             {
  345.                 $this->pageNavigation->setCount($count); // count of records
  346.                 $this->pageNavigation->setProperties($param); // order, page
  347.                 $this->pageNavigation->setLimit($limit); // limit
  348.             }
  349.             
  350.             // close the transaction
  351.             TTransaction::close();
  352.             $this->loaded true;
  353.         }
  354.         catch (Exception $e// in case of exception
  355.         {
  356.             // shows the exception error message
  357.             new TMessage('error'$e->getMessage());
  358.             // undo all pending operations
  359.             TTransaction::rollback();
  360.         }
  361.     }    
  362.     
  363.     
  364.      /**
  365.      * Register the filter in the session
  366.      */
  367.     public function onSearch()
  368.     {
  369.         // get the search form data
  370.         $data $this->form->getData();
  371.         $this->datagrid->clear();
  372.         //var_dump($data);
  373.         
  374.         if ($this->formFilters)
  375.         {
  376.             foreach ($this->formFilters as $filterKey => $formFilter)
  377.             {
  378.                 $operator    = isset($this->operators[$filterKey]) ? $this->operators[$filterKey] : 'like';
  379.                 $filterField = isset($this->filterFields[$filterKey]) ? $this->filterFields[$filterKey] : $formFilter;
  380.                 
  381.                 // check if the user has filled the form
  382.                 if (isset($data->{$formFilter}) AND $data->{$formFilter})
  383.                 {
  384.                     // creates a filter using what the user has typed
  385.                     if (stristr($operator'like'))
  386.                     {
  387.                         $filter = new TFilter($filterField$operator"%{$data->{$formFilter}}%");
  388.                     }
  389.                     else
  390.                     {
  391.                         $filter = new TFilter($filterField$operator$data->{$formFilter});
  392.                     }
  393.                     
  394.                     // stores the filter in the session
  395.                     TSession::setValue($this->activeRecord.'_filter'$filter); // BC compatibility
  396.                     TSession::setValue($this->activeRecord.'_filter_'.$formFilter$filter);
  397.                     TSession::setValue($this->activeRecord.'_'.$formFilter$data->{$formFilter});
  398.                 }
  399.                 else
  400.                 {
  401.                     TSession::setValue($this->activeRecord.'_filter'NULL); // BC compatibility
  402.                     TSession::setValue($this->activeRecord.'_filter_'.$formFilterNULL);
  403.                     TSession::setValue($this->activeRecord.'_'.$formFilter'');
  404.                 }
  405.             }
  406.         }
  407.         
  408.         TSession::setValue($this->activeRecord.'_filter_data'$data);
  409.         
  410.         // fill the form with data again
  411.         $this->form->setData($data);
  412.         
  413.         $param=array();
  414.         $param['offset']    =0;
  415.         $param['first_page']=1;
  416.         $this->onReload($param);
  417.     }
  418.         
  419. }
  420. ?>
FC

rapaz.... o que essa linha ta fazendo ai no código?

parent::show();
MG

Eu acho que peguei algum exemplo no desespero para resolver ou implementar algo que deixei lá.
Retirei e alguns comportamentos estranhos como um post que coloquei (vou excluir), sobre problema de navegação somente nesta tela.
Mas o erro continua quanto ativo o data table.
Em todas as telas que ativei, dá o mesmo erro.
FC

Cria uma lista de registros com o assistente nova e executa se continuar o erro é pq vc mudou algo no nucleo do framework ou no carregamento das bibliotecas.
MG

Farei isso, por enquanto obrigado!
NR

Faça o teste retirando:
  1. <?php
  2. //$this->datagrid->setGroupColumn...
  3. ?>

Acho que não é possível usar os 2 recursos juntos(dataTable e groupColumn)
MG

Nataniel
Eu acho que é isso mesmo.
Fiz o que sugeriu e não deu erro habilitando o datatable.
Obrigado!