Structures_Datagrid: new DataSource class
| From: | Mark Wiesemann | Date: | Sat, 30 Apr 2005 19:11:45 +0000 |
| Subject: | Structures_Datagrid: new DataSource class | ||
| Groups: | php.pear.dev | ||
| Request: | Send a blank email to pear-dev+get-37460@lists.php.net to get a copy of this message | ||
Hi,
I'd like to propose a new DataSource class which can handle DB_Table
objects.
Here is the code: http://www.markwiesemann.de/php/DB_Table.phps
The code bases on the DB_Result DataSource class. As DB_Table can handle
sorting in the select* functions the sort function of my class is not
needed. At the moment a PEAR_Error object is returned if one calls this
function. I don't know enough of the internals of Datagrid - maybe the
function is not needed in every DataSource driver class and can be
deleted.
Usage of the new driver:
(1) Assuming one has a DB_Table object called $c:
require_once 'Structures/DataGrid/DataSource.php';
$dg =& new Structures_DataGrid();
$ds = Structures_DataGrid_DataSource::create($c,
array('view' => 'all'), 'DB_Table');
$dg->bindDataSource($ds);
$dg->render();
(2) Assuming the following lines were added in DataSource.php, function
"_detectSourceType":
// DB_Table
case (strtolower(get_parent_class($source)) == 'db_table'):
return 'DB_Table'; // to be replaced by a new constant
break;
you can use it this (common) way:
$dg =& new Structures_DataGrid();
$dg->bind($c, array('view' => 'all'));
$dg->render();
In both cases one has to specify a valid key from $c->sql in the option
array (has to be a name of a predefined select option in DB_Table
subclass).
My bind function returns two times a PEAR_Error (DB_Result also returns
one PEAR_Error on failure). Due to a bug (?) in DataGrid this will never
be displayed or registered. This is because of line 179 of
DataSource.php (current CVS version):
$driver->bind($source, $options);
==> The returned PEAR_Error get's lost.
It would be nice if the Datagrid team could add this new DataSource
driver to their package.
Mark