Class: DataGrid
- Package: saf.GUI
- Access: public
Generates tables of data with automatic next/previous paging, sorting
by column headers, and add/edit/delete capabilities (via linking to
specified URLs. Also handles the retrieval of the data from the
specified table automatically.
Usage Example
<?php
loader_import ('saf.GUI.DataGrid');
$dg = new DataGrid (
'sitellite_user',
array (
'username' => 'User ID',
'lastname' => 'Last Name',
'firstname' => 'First Name',
'company' => 'Company',
'email' => 'Email Address',
)
);
page_title ('Member List');
$dg->setEditUrl ('/index/user-edit-action');
$dg->setDeleteUrl ('/index/user-delete-action');
$dg->setAddUrl ('/index/user-add-action');
echo $dg->draw ();
?>
Properties
$template = '
{if obj.addUrl}
<p><a href="{addUrl}?collection={collection}">{intl Add Item}</a></p>
{end if}
{alt #eee #fff}
{if obj.deleteUrl}
<script language="javascript" type="text/javascript">
var datagrid_select_switch = false;
function datagrid_select_all (f) {
if (datagrid_select_switch == false) {
for (i = 0; i < f.elements.length; i++) {
f.elements[i].checked = true;
datagrid_select_switch = true;
}
} else {
for (i = 0; i < f.elements.length; i++) {
f.elements[i].checked = false;
datagrid_select_switch = false;
}
}
return false;
}
function datagrid_confirm_delete () {
return confirm (\'{intl Are you sure you want to delete the selected items?}\');
}
</script>
<form method="post" action="{deleteUrl}">
<input type="hidden" name="collection" value="{collection}" />
{filter none}
{rememberHiddenValues}
{end filter}
{end if}
{filter none}{header}{end filter}
<table border="0" cellpadding="3" width="100%">
<tr>
<td>{spt PAGER_TEMPLATE_FROM_TO}</td>
<td align="right">{if pager.total}{spt PAGER_TEMPLATE_PREV_PAGE_LIST_NEXT}{end if}</td>
</tr>
</table>
<table border="0" cellpadding="2" cellspacing="1" width="100%">
<tr style="background-color: {alt/next}">
{if obj.deleteUrl}
<th width="52" valign="bottom">
<input type="image" src="{site/prefix}/inc/app/cms/pix/icons/select-all.gif" alt="{intl Select All}" title="{intl Select All}" border="0" onclick="return datagrid_select_all (this.form)" />
<input type="image" src="{site/prefix}/inc/app/cms/pix/icons/delete.gif" alt="{intl Delete Selected}" title="{intl Delete Selected}" border="0" onclick="return datagrid_confirm_delete ()" />
</th>
{end if}
{loop obj.headers}
{if in_array (loop.name, obj.skipHeaders)}
<th>{loop/fullname}</th>
{end if}
{if else}
<th><a href="{site/current}?offset={cgi/offset}&orderBy={loop/name}&sort={loop/getSort}{rememberParams}">{loop/fullname}</a>
{if loop.isCurrent ()}
<img src="{site/prefix}/inc/app/cms/pix/arrow.{cgi/sort}.gif" alt="{cgi/sort}" border="0" />
{end if}
</th>
{end if}
{end loop}
</tr>
{loop obj.list}
<tr style="background-color: {alt/next}">
{if obj.deleteUrl}
<td align="center"><input type="checkbox" name="items[]" value="{loop/_key}" /></td>
{end if}
{loop loop._properties}
{if in_array (loop._key, array_keys (obj.headers))}
{if obj.editUrl and loop._key eq obj.first_field}
<td>
<a href="{editUrl}?collection={collection}&item={parent/_key}{rememberParams}">{filter datagrid_filter}{loop/_value}{end filter}</a>
</td>
{end if}
{if else}
<td>
{filter datagrid_filter}{loop/_value}{end filter}
</td>
{end if}
{end if}
{end loop}
</tr>
{end loop}
</table>
{filter none}{footer}{end filter}
{if obj.deleteUrl}
</form>
{end if}
'
{if obj.addUrl}
<p><a href="{addUrl}?collection={collection}">{intl Add Item}</a></p>
{end if}
{alt #eee #fff}
{if obj.deleteUrl}
<script language="javascript" type="text/javascript">
var datagrid_select_switch = false;
function datagrid_select_all (f) {
if (datagrid_select_switch == false) {
for (i = 0; i < f.elements.length; i++) {
f.elements[i].checked = true;
datagrid_select_switch = true;
}
} else {
for (i = 0; i < f.elements.length; i++) {
f.elements[i].checked = false;
datagrid_select_switch = false;
}
}
return false;
}
function datagrid_confirm_delete () {
return confirm (\'{intl Are you sure you want to delete the selected items?}\');
}
</script>
<form method="post" action="{deleteUrl}">
<input type="hidden" name="collection" value="{collection}" />
{filter none}
{rememberHiddenValues}
{end filter}
{end if}
{filter none}{header}{end filter}
<table border="0" cellpadding="3" width="100%">
<tr>
<td>{spt PAGER_TEMPLATE_FROM_TO}</td>
<td align="right">{if pager.total}{spt PAGER_TEMPLATE_PREV_PAGE_LIST_NEXT}{end if}</td>
</tr>
</table>
<table border="0" cellpadding="2" cellspacing="1" width="100%">
<tr style="background-color: {alt/next}">
{if obj.deleteUrl}
<th width="52" valign="bottom">
<input type="image" src="{site/prefix}/inc/app/cms/pix/icons/select-all.gif" alt="{intl Select All}" title="{intl Select All}" border="0" onclick="return datagrid_select_all (this.form)" />
<input type="image" src="{site/prefix}/inc/app/cms/pix/icons/delete.gif" alt="{intl Delete Selected}" title="{intl Delete Selected}" border="0" onclick="return datagrid_confirm_delete ()" />
</th>
{end if}
{loop obj.headers}
{if in_array (loop.name, obj.skipHeaders)}
<th>{loop/fullname}</th>
{end if}
{if else}
<th><a href="{site/current}?offset={cgi/offset}&orderBy={loop/name}&sort={loop/getSort}{rememberParams}">{loop/fullname}</a>
{if loop.isCurrent ()}
<img src="{site/prefix}/inc/app/cms/pix/arrow.{cgi/sort}.gif" alt="{cgi/sort}" border="0" />
{end if}
</th>
{end if}
{end loop}
</tr>
{loop obj.list}
<tr style="background-color: {alt/next}">
{if obj.deleteUrl}
<td align="center"><input type="checkbox" name="items[]" value="{loop/_key}" /></td>
{end if}
{loop loop._properties}
{if in_array (loop._key, array_keys (obj.headers))}
{if obj.editUrl and loop._key eq obj.first_field}
<td>
<a href="{editUrl}?collection={collection}&item={parent/_key}{rememberParams}">{filter datagrid_filter}{loop/_value}{end filter}</a>
</td>
{end if}
{if else}
<td>
{filter datagrid_filter}{loop/_value}{end filter}
</td>
{end if}
{end if}
{end loop}
</tr>
{end loop}
</table>
{filter none}{footer}{end filter}
{if obj.deleteUrl}
</form>
{end if}
'
$fill
- Access: public
The object or associative array to use to fill the template with upon
calling render().
$span
- Access: public
The span of this cell. Set to -1 and the cell will disappear. Use
$this->attrs['colspan'] or ['rowspan'] to set these properties in the
corresponding HTML <td> tag.
$attrs = array ()
- Access: public
Contains all HTML <td> properties for the current object.
$default
- Access: public
$default is an optional default value to place in cells whose
templates result in no output.
$type = 'db'
$collection
$limit
$fields
$total = 0
$list = false
$remember = array ()
$skipHeaders = array ()
$header = ''
$footer = ''
$editUrl = false
$addUrl = false
$deleteUrl = false
$error
Methods
DataGrid ($collection, $fields, $limit = false)
primaryKey ($field)
setEditUrl ($url)
setAddUrl ($url)
setDeleteUrl ($url)
skipHeader ($name)
rememberValue ($name, $value = false)
rememberParams ()
- Access: private
rememberHiddenValues ()
- Access: private
