MC
Alterar valor de um campo no Datagrid - TStandardList
Pessoal, minha primeira postagem no fórum.
Comecei a utilizar recentemente o Framework, inclusive comprei dois livros do Pablo. O livro do Adianti e o livro de PHP Programando com Orientação a objetos.
Programo em outras linguagens, mas com o conceito ainda procedural. Estou engatinhando a orientação a objetos. Achei o framework fantástico, pois mesmo nunca tendo trabalhado 100% com orientação a objetos e nenhuma linguagem para Web, já consegui desenvolver muita coisa.
Minha dúvida é a seguinte...
Criei um form List e um form de cadastro, semelhante ao padrão utilizado nos apps de exemplo.
No form List, tenho um datagrid que busca informações do Banco de Dados com ID, Nome e "Função Liderança?". Neste último eu armazeno "S" para sim e "N" para não.
Porém, na listagem eu não gostaria de exibir "S" ou "N", mas "SIM" ou "NÃO". Pode parecer algo simples, mas não consegui imaginar como fazer sem alguma gambiarra.
Desculpem pela pergunta de iniciante...
Segue classe model e control:
Control:
Comecei a utilizar recentemente o Framework, inclusive comprei dois livros do Pablo. O livro do Adianti e o livro de PHP Programando com Orientação a objetos.
Programo em outras linguagens, mas com o conceito ainda procedural. Estou engatinhando a orientação a objetos. Achei o framework fantástico, pois mesmo nunca tendo trabalhado 100% com orientação a objetos e nenhuma linguagem para Web, já consegui desenvolver muita coisa.
Minha dúvida é a seguinte...
Criei um form List e um form de cadastro, semelhante ao padrão utilizado nos apps de exemplo.
No form List, tenho um datagrid que busca informações do Banco de Dados com ID, Nome e "Função Liderança?". Neste último eu armazeno "S" para sim e "N" para não.
Porém, na listagem eu não gostaria de exibir "S" ou "N", mas "SIM" ou "NÃO". Pode parecer algo simples, mas não consegui imaginar como fazer sem alguma gambiarra.
Desculpem pela pergunta de iniciante...
Segue classe model e control:
- <?php
- /**
- * Funcao Active Record
- * @author <your-name-here>
- */
- class Funcao extends TRecord
- {
- const TABLENAME = 'funcao';
- const PRIMARYKEY= 'id';
- const IDPOLICY = 'max'; // {max, serial}
-
-
- /**
- * Constructor method
- */
- public function __construct($id = NULL, $callObjectLoad = TRUE)
- {
- parent::__construct($id, $callObjectLoad);
- parent::addAttribute('descricao');
- parent::addAttribute('lideranca');
- }
- }
- ?>
Control:
- <?php
- /**
- * FuncaoList Listing
- * @author <your name here>
- */
- class FuncaoList extends TStandardList
- {
- protected $form; // registration form
- protected $datagrid; // listing
- protected $pageNavigation;
- protected $formgrid;
- protected $deleteButton;
- protected $transformCallback;
-
- /**
- * Page constructor
- */
- public function __construct()
- {
- parent::__construct();
-
- parent::setDatabase('mvadmin'); // defines the database
- parent::setActiveRecord('Funcao'); // defines the active record
- parent::setDefaultOrder('id', 'asc'); // defines the default order
- // parent::setCriteria($criteria) // define a standard filter
- parent::addFilterField('id', '=', 'id'); // filterField, operator, formField
- parent::addFilterField('descricao', 'like', 'descricao'); // filterField, operator, formField
- parent::addFilterField('lideranca', '=', 'lideranca'); // filterField, operator, formField
-
- // creates the form
- $this->form = new TQuickForm('form_search_Funcao');
- $this->form->class = 'tform'; // change CSS class
-
- $this->form->style = 'display: table;width:100%'; // change style
- $this->form->setFormTitle('Funcao');
-
- // create the form fields
- $id = new TEntry('id');
- $descricao = new TEntry('descricao');
- $lideranca = new TEntry('lideranca');
- // add the fields
- $this->form->addQuickField('Código', $id, 200 );
- $this->form->addQuickField('Descrição', $descricao, 200 );
- $this->form->addQuickField('Função de Liderança?', $lideranca, 200 );
-
- // keep the form filled during navigation with session data
- $this->form->setData( TSession::getValue('Funcao_filter_data') );
-
- // add the search form actions
- $this->form->addQuickAction(_t('Find'), new TAction(array($this, 'onSearch')), 'fa:search');
- $this->form->addQuickAction(_t('New'), new TAction(array('FuncaoForm', 'onEdit')), 'bs:plus-sign green');
-
- // creates a DataGrid
- $this->datagrid = new TDataGrid;
-
- $this->datagrid->style = 'width: 100%';
- $this->datagrid->datatable = 'true';
- // $this->datagrid->enablePopover('Popover', 'Hi <b> {name} </b>');
-
- // creates the datagrid columns
- $column_id = new TDataGridColumn('id', 'Código', 'right');
- $column_descricao = new TDataGridColumn('descricao', 'Descrição', 'left');
- $column_lideranca = new TDataGridColumn('lideranca', 'Função de Liderança?', 'left');
- // add the columns to the DataGrid
- $this->datagrid->addColumn($column_id);
- $this->datagrid->addColumn($column_descricao);
- $this->datagrid->addColumn($column_lideranca);
- // creates the datagrid column actions
- $order_id = new TAction(array($this, 'onReload'));
- $order_id->setParameter('order', 'id');
- $column_id->setAction($order_id);
-
- $order_descricao = new TAction(array($this, 'onReload'));
- $order_descricao->setParameter('order', 'descricao');
- $column_descricao->setAction($order_descricao);
-
-
- // create EDIT action
- $action_edit = new TDataGridAction(array('FuncaoForm', 'onEdit'));
- $action_edit->setUseButton(TRUE);
- $action_edit->setButtonClass('btn btn-default');
- $action_edit->setLabel(_t('Edit'));
- $action_edit->setImage('fa:pencil-square-o blue fa-lg');
- $action_edit->setField('id');
- $this->datagrid->addAction($action_edit);
-
- // create DELETE action
- $action_del = new TDataGridAction(array($this, 'onDelete'));
- $action_del->setUseButton(TRUE);
- $action_del->setButtonClass('btn btn-default');
- $action_del->setLabel(_t('Delete'));
- $action_del->setImage('fa:trash-o red fa-lg');
- $action_del->setField('id');
- $this->datagrid->addAction($action_del);
-
- // create the datagrid model
- $this->datagrid->createModel();
-
- // create the page navigation
- $this->pageNavigation = new TPageNavigation;
- $this->pageNavigation->setAction(new TAction(array($this, 'onReload')));
- $this->pageNavigation->setWidth($this->datagrid->getWidth());
-
- // vertical box container
- $container = new TVBox;
- $container->style = 'width: 90%';
- // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $container->add($this->form);
- $container->add($this->datagrid);
- $container->add($this->pageNavigation);
-
- parent::add($container);
- }
-
- }
- ?>
Boa noite Marcelo,
Testa o seguinte no teu control:
Boa noite Marcelo,
Testa o seguinte no teu control:
Muito obrigado Alexandre.
Ajustei apenas um detalhe de sintaxe no comando que você me passou, e funcionou perfeitamente.
Substitui $lideranca por $column_lideranca, que é a coluna do Datagrid, e ajustei a sintaxe do setTransformer().
Ficou assim:
Boa tarde, outra forma de fazer poderia ser adicionar a seguinte função no Model
Esta função é chamada automaticamente toda vez que o Model retornar a propriedade lideranca.
O único problema que tive e não sei como resolver, é que quando uso o model em uma função onEdit e uso a função "$this->form->setData($object);" para popular uma combobox no meu form na edição, recebo no formulário o valor retornado pela função get que escrevi pra propriedade no Model e não o id do combo.
Alguém sabe como posso diferenciar no model quando quero apresentar os dados na grid (que dai quero que seja executada a função get do meu model) e quando quero editar os dados (preciso do id do objeto não mais o valor)?
Função onEdit
Função que modifica o atributo id_suporte dentro do model Filme
Pessoal resolvi meu problema escrevendo um transformer para mostrar os dados na grid e removendo a função get_id_suporte do model
Pessoal resolvi meu problema escrevendo um transformer para mostrar os dados na grid e removendo a função get_id_suporte do model