Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Dificuldade em manter botões acima da grid Olá Pessoal, Criei uma pagina com template html, e nesta página alterno entre grid fisico e juridico, porém ao navegar entre as paginações das grids estou tendo dificuldades em manter os botões de alternância e os titulos .na grid. Alguém pode me ajudar ? Segue código abaixo : ...
RB
Dificuldade em manter botões acima da grid  
Olá Pessoal,

Criei uma pagina com template html, e nesta página alterno entre grid fisico e juridico, porém ao navegar entre as paginações das grids estou tendo dificuldades em manter os botões de alternância e os titulos .na grid.

Alguém pode me ajudar ?

Segue código abaixo :

<!--[main]-->
<link href="app/resources/styles.css" rel="stylesheet" type="text/css" media="screen" />

<table class="customform" style="width: 100%">
<!--[object]-->
<tr>
<td colspan="2">{$widget}</td>
</tr>
<!--[/object]-->
</table>
<!--[/main]-->

Classe cliente
  1. <?php
  2. class Cliente extends TPage
  3. {
  4.     /**
  5.      * Constructor method
  6.      */
  7.     protected $hbox_actions;
  8.     protected $container;
  9.     public function __construct()
  10.     {
  11.         parent::__construct();        
  12.         
  13.         $link1 = new TActionLink('Físico', new TAction(array($this'onFisico')), 'green'10null'fa:search');
  14.         $link2 = new TActionLink('Jurídico', new TAction(array($this'onJuridico')), 'blue'10null'fa:search');
  15.         
  16.         $link1->class 'btn btn-default';
  17.         $link2->class 'btn btn-default';
  18.         
  19.         $this->hbox_actions THBox::pack($link1,$link2);
  20.         
  21.         try
  22.         {
  23.             // create the HTML Renderer
  24.             $this->html = new THtmlRenderer('app/view/clienteRender.html');
  25.             $this->onFisico();
  26.             // define replacements for the main section
  27.             $replace = array();
  28.             
  29.             // replace the main section variables
  30.             $this->html->enableSection('main'$replace);
  31.             
  32.             // Table wrapper (form and HTML)
  33.             $this->container = new TVBox;
  34.             $this->container->style 'width:100%';
  35.             $this->container->add(new TXMLBreadCrumb('menu.xml'__CLASS__));
  36.             $this->container->add($this->hbox_actions);
  37.             $this->container->add($this->html);
  38.             parent::add($this->container);
  39.         }
  40.         catch (Exception $e)
  41.         {
  42.             new TMessage('error'$e->getMessage());
  43.         }
  44.     }
  45.     
  46.      /**
  47.      * Executed when the user clicks at the action1 button
  48.      */
  49.     public function onFisico()
  50.     {
  51.         $datagrid = new DataGridClienteFisico;
  52.         $str get_class($datagrid); 
  53.         $replace = array();
  54.         $replace['widget'] = $datagrid;
  55.         $replace['class']  = get_class($datagrid);
  56.         $replace['cliente'] = substr($str,15);
  57.         
  58.         //replace the object section variables
  59.         $this->html->enableSection('object'$replace);
  60.     }
  61.     
  62.     /**
  63.      * Executed when the user clicks at the action2 button
  64.      */
  65.     public function onJuridico()
  66.     {
  67.         $datagrid = new DataGridClienteJuridico;
  68.         $str get_class($datagrid); 
  69.         $replace = array();
  70.         $replace['widget'] = $datagrid;
  71.         $replace['class']  = get_class($datagrid);
  72.         $replace['cliente'] = substr($str,15);
  73.         
  74.         // replace the object section variables
  75.         $this->html->enableSection('object'$replace);
  76.     }
  77. }
  78. ?>


Estrutura grid
  1. <?php
  2. class DataGridClienteJuridico extends TPage
  3. {
  4.     private $datagrid$pageNavigation$loaded;
  5.     private static $db 'db';
  6.     public function __construct()
  7.     {
  8.       parent::__construct();
  9.       // creates one datagrid
  10.       $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
  11.       $this->datagrid->width '100%';
  12.       // add the columns
  13.       $this->datagrid->addColumn(new TDataGridColumn('pessoa_id','#','center',''));
  14.       $cnpj $this->datagrid->addColumn(new TDataGridColumn('pessoa->juridica->cnpj','CNPJ','left',''));
  15.       $data_cadastro $this->datagrid->addColumn(new TDataGridColumn('pessoa->juridica->razao_social','Razão Social','left',''));
  16.       $nome_fantasia $this->datagrid->addColumn(new TDataGridColumn('pessoa->juridica->nome_fantasia','Nome Fantasia','left',''));
  17.       $unidade $this->datagrid->addColumn(new TDataGridColumn('pessoa->juridica->tipo->nome',_t('Unit'),'left',''));
  18.       $atividade_principal $this->datagrid->addColumn(new TDataGridColumn('pessoa->juridica->atividade_principal','Atividade Principal','left',''));
  19.       $email $this->datagrid->addColumn(new TDataGridColumn('pessoa->juridica->email','Email','left',''));
  20.       $cidade $this->datagrid->addColumn(new TDataGridColumn('pessoa_endereco->endereco->estado->nome','Cidade','left',''));
  21.       $uf $this->datagrid->addColumn(new TDataGridColumn('pessoa_endereco->endereco->estado->uf','UF','left',''));
  22.       $editar $this->datagrid->addColumn(new TDataGridColumn('editar','','center'));
  23.       $deletar $this->datagrid->addColumn(new TDataGridColumn('deletar','','center'));
  24.       
  25.       $data_cadastro->enableAutoHide(500);
  26.       $nome_fantasia->enableAutoHide(600);
  27.       //$unidade->enableAutoHide(700);
  28.       $atividade_principal->enableAutoHide(800);
  29.       $email->enableAutoHide(900);
  30.       $uf->enableAutoHide(1000);
  31.       $cidade->enableAutoHide(1000);
  32.       $uf->setDataProperty('style','font-weight: bold');
  33.       // creates the datagrid model
  34.       $this->datagrid->createModel();
  35.       // creates the page navigation
  36.       $this->pageNavigation = new TPageNavigation;
  37.       $this->pageNavigation->setAction(new TAction([$this'onReload']));
  38.       $this->pageNavigation->setWidth($this->datagrid->getWidth());
  39.       $this->pageNavigation->enableCounters();
  40.       // search box
  41.       $input_search = new TEntry('input_search');
  42.       $input_search->placeholder _t('Search');
  43.       $input_search->setSize('100%');
  44.       // enable fuse search by column name
  45.       $this->datagrid->enableSearch($input_search,'pessoa_id,pessoa->juridica->cnpj,pessoa->juridica->razao_social,pessoa->juridica->atividade_principal,pessoa->juridica->email,pessoa_endereco->endereco->estado->nome,pessoa_endereco->endereco->estado->uf');
  46.       $panel = new TPanelGroup('{$cliente}');
  47.       $panel->addHeaderWidget($input_search);
  48.       $panel->add($this->datagrid)->style 'overflow-x:auto';
  49.       $panel->addFooter($this->pageNavigation);
  50.       
  51.       $link = new TActionLink('Incluir', new TAction(array('JuridicaForm''onClear')), 'white'12null'fa:plus-circle');
  52.       $link->class 'btn btn-default';
  53.       $link->style .= ';margin: 10px 45% 0 45%;padding:3px 10px 5px 10px;heigth:25px;background:#112a47;color:#fff;text-shadow: 1px 1px #333;';
  54.       // wrap the page content using vertical box
  55.       $vbox = new TVBox;
  56.       $vbox->style 'width: 100%';
  57.       //$vbox->add(new TXMLBreadCrumb('menu.xml',__CLASS__));
  58.       $vbox->add($panel);
  59.       $vbox->add($link);
  60.       parent::add($vbox);
  61.     }
  62.     /**
  63.      * method onReload()
  64.      * Load the datagrid with the database objects
  65.      */
  66.     function onReload($param NULL)
  67.     {
  68.       try
  69.       {
  70.           // open a transaction with database self::$db
  71.           TTransaction::open(self::$db);
  72.           // creates a repository for PessoaVinculo
  73.           $repository = new TRepository('PessoaVinculo');
  74.           $limit 3;
  75.           // creates a criteria
  76.           $criteria = new TCriteria;$criteria->add(new TFilter('tipo_pessoa_id','='2));
  77.           //$criteria->add(new TFilter('tipo_vinculo_id','=', 2));
  78.           //$criteria->add(new TFilter('system_unit_id','=', TSession::getValue('userunitid')));
  79.           $criteria->add(new TFilter('situacao_id''='1));
  80.           // default order
  81.           if (empty($param['order']))
  82.           {
  83.               $param['order'] = 'pessoa_id';
  84.               $param['direction'] = 'asc';
  85.           }
  86.           $criteria->setProperties($param); // order, offset
  87.           $criteria->setProperty('limit'$limit);
  88.           // load the objects according to criteria
  89.           $objects $repository->load($criteria);
  90.           $this->datagrid->clear();
  91.           if ($objects)
  92.           {
  93.             // iterate the collection of active records
  94.             foreach ($objects as $object)
  95.             {
  96.               //cria os botões de ação e adiciona a datagrid
  97.               $edit = new TElement('i');
  98.               $edit->class="fa fa-search blue";
  99.               $action = new TAction(['JuridicaForm','onEdit'],['pessoa_id'=>"$object->pessoa_id"]);
  100.               $action->setParameter('key',$object->pessoa_id);
  101.               $object->editar $edit;
  102.               $a = new TActionLink($edit$action);
  103.               $a->class 'btn_transparent';
  104.               $del = new TElement('i');
  105.               $del->class ="fa fa-trash-alt red";
  106.               $action1 = new TAction(array($this'onDelete'));
  107.               $action1->setParameter('key',$object->pessoa_id);
  108.               $object->deletar $del;
  109.               
  110.               $b = new TActionLink($del$action1);
  111.               $b->class 'btn_transparent';
  112.               $object->editar $a;
  113.               $object->deletar $b;
  114.               
  115.               $object->pessoa->juridica->cnpj FuncoesUteis::formataString('cnpj',$object->pessoa->juridica->cnpj);
  116.               
  117.               // add the object inside the datagrid
  118.               $this->datagrid->addItem($object);
  119.             }
  120.           }
  121.           // reset the criteria for record count
  122.           $criteria->resetProperties();
  123.           $count $repository->count($criteria);
  124.           $this->pageNavigation->setCount($count); // count of records
  125.           $this->pageNavigation->setProperties($param); // order, page
  126.           $this->pageNavigation->setLimit($limit); // limit
  127.           // close the transaction
  128.           TTransaction::close();
  129.           $this->loaded true;
  130.         }
  131.         catch (Exception $e// in case of exception
  132.         {
  133.             new TMessage('error'$e->getMessage()); // shows the exception error message
  134.             TTransaction::rollback(); // undo all pending operations
  135.         }
  136.     }
  137.     /**
  138.      * Executed when the user clicks at the view button
  139.      */
  140.     public static function onView($param)
  141.     {
  142.         // get the parameter and shows the message
  143.         $code $param['pessoa_id'];
  144.         $name $param['pessoa->juridica->nome'];
  145.         new TMessage('info'"The code is: <b>$code</b> <br> The name is : <b>$name</b>");
  146.     }
  147.     /**
  148.      * Ask before deletion
  149.      */
  150.     public static function onDelete($param)
  151.     {
  152.         // define the delete action
  153.         $action = new TAction(array(__CLASS__'Delete'));
  154.         $action->setParameters($param); // pass the key parameter ahead
  155.         // shows a dialog to the user
  156.         new TQuestion(AdiantiCoreTranslator::translate('Do you really want to delete ?'), $action);
  157.     }
  158.     /**
  159.      * Delete a record
  160.      */
  161.     public static function Delete($param)
  162.     {
  163.         try
  164.         {
  165.             $key $param['key']; // get the parameter $key
  166.             $system_unit_id =  TSession::getValue('userunitid');
  167.             TTransaction::open(self::$db); // open a transaction with database
  168.             $cliente PessoaVinculo::where('pessoa_id','='$key)
  169.             ->where('system_unit_id','=',$system_unit_id)
  170.             ->set('situacao_id'10)
  171.             ->update();
  172.             TTransaction::close(); // close the transaction
  173.             $pos_action = new TAction([__CLASS__'onReload']);
  174.             new TMessage('info'AdiantiCoreTranslator::translate('Record deleted'), $pos_action); // success message
  175.         }
  176.         catch (Exception $e// in case of exception
  177.         {
  178.             new TMessage('error'$e->getMessage()); // shows the exception error message
  179.             TTransaction::rollback(); // undo all pending operations
  180.         }
  181.     }
  182.    /**
  183.      * shows the page
  184.      */
  185.     function show()
  186.     {
  187.       $this->onReload();
  188.       parent::show();
  189.     }
  190. }

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (2)


AC

Bom dia.

Costumo criar um form e adicionar pelo menos um THidden e os botões que preciso.
Ao incluir no container, no final do código do constructor, tenha a atenção de colocar os componentes (form e grid) na ordem em que deseja que apareçam.
Se o espaço referente ao form ficar ocupando mais espaço do que deveria: css nele.
Contudo, creio ter visto um exemplo desse mesmo estilo que necessita no Tutor. Dê uma olhada lá.
Espero ter ajudado.
NR

Quem adiciona os botões na parte superior é a classe Cliente, mas ao usar a paginação é chamada diretamente a classe da grid, desse modo a tela é recarregada somente com a renderização da grid.

Você pode usar a função setTargetContainer pra fazer com que somente uma parte da tela seja recarregada. Veja o exemplo do tutor:
adianti.com.br/framework_files/tutor/index.php?class=InboxView