Hi Filipe,
I have done it base on 3 others component:
Mmx_Data_Sort
Mmx_Data_Criterion
Mmx_Data_Pager
There is no coupling between components so you can use them
individually. The rendering part is done as in Zend_Form : a
__toString() method is making use of view helpers.
May be http://xyster.devweblog.org/ and Xyster_Data is worth a like look
as component to build something upon. I haven’t time to get a closer
look though.
A basic use case:
// Data Grid
Zend_Loader::loadClass('Mmx_Data_Grid');
// Params: grid name, filter data, sort column
$grid = new Mmx_Data_Grid('users', $_POST, @$_GET['sort']);
$grid->addElement('integer', 'user_id');
$grid->addElement('integer', 'acl_role_id');
$grid->addElement('string', 'username');
$grid->addElement('string', 'firstname');
$grid->addElement('string', 'lastname');
$grid->addElement('boolean', 'isActive');
$grid->setDefaultSort('username');
$rowsPerPage = $this->getRequest()->getParam('limit');
$currentPage = $this->getRequest()->getParam('page', 1);
$totalRows = $usersTable->count($grid->getFilterCriteria());
$grid->initPager($totalRows, $rowsPerPage, $currentPage);
// Query DB
$rows = $usersTable->fetchAll($grid->getFilterCriteria(),
$grid->getSortCriteria(),$grid->getRowsPerPage(), $grid->getPageOffset());
$grid->populate($rows);
// Grid Renderer
$options = array(
'labels' => $this->_labels,
'pkname' => 'user_id',
'urlbase' => $this->view->url(array('page'=>'@@page@@'), null, false,
false),
'urledit' => $this->view->url(array('action'=>'edit',
'page'=>null)).'/@@id@@?Mmx_Back=1',
'urldelete'=>
$this->view->url(array('action'=>'delete')).'/@@id@@?Mmx_Back=1'
);
$grid->setDecorators($options);
$this->view->grid = $grid;
--
Laurent Melmoux
Conseils et Solutions Web | [EMAIL PROTECTED]
2mx - Annecy, France | http://www.2mx.fr/
Filipe Carvalho a écrit :
Hi all,
I'm looking for something like phpGrid (http://www.phpgrid.com/). Not
so advanced... i will be happy in having out the box features like:
- Paging
- Sorting columns
- Capability to create links values of some columns
It is not hard to do it, but using model-view-controller pattern I
can't realize how to do something clean and reusable.
Can you give some clues how to do it?
Best Regards,
Filipe Carvalho