'.$this->pageTitle.''; if (!isset($limit)) $limit = 20; if (!isset($limitOptions)) { $limitOptions = array($limit); if ($limit < 10) array_push($limitOptions, 2, 5); if ($limit < 30) array_push($limitOptions, 10, 25); if ($limit > 10) array_push($limitOptions, 25, 50, 200); if ($limit > 20) array_push($limitOptions, 500); } sort($limitOptions, SORT_NUMERIC); $limitOptions = array_unique($limitOptions, SORT_NUMERIC); if (!isset($height)) $height = 'auto'; if (!isset($controller)) $controller = $this->params['controller']; if (!isset($grid_div_class)) $grid_div_class = ''; $grid_div_class = 'item grid list' . ($grid_div_class ? ' '.$grid_div_class : ''); if (!isset($grid_div_id)) $grid_div_id = $controller . '-list'; if (!isset($grid_id)) $grid_id = $grid_div_id . '-jqGrid'; if (!isset($search_fields)) $search_fields = array(); if (!isset($grid_setup)) $grid_setup = array(); // Do some prework to bring in the appropriate libraries $imgpath = '/pmgr/site/css/jqGrid/basic/images'; $html->css('jqGrid/basic/grid', null, null, false); $html->css('jqGrid/jqModal', null, null, false); $javascript->link('jqGrid/jquery.jqGrid.js', false); $javascript->link('jqGrid/js/jqModal', false); $javascript->link('jqGrid/js/jqDnR', false); $javascript->link('pmgr_jqGrid', false); // Define the URL to fetch data from. // To prevent having to keep the controller and the view // in sync on which fields need to be queried by the // controller in order to be accessible to the view, // we'll just pass the desired fields to the controller // as part of the data fetch. $url = $html->url(array('controller' => $controller, 'action' => 'jqGridData', 'debug' => 0, )); // Create extra parameters that jqGrid will pass to our // controller whenever data is requested. // 'fields' will allow the controller to return only the // requested fields, and in the right order. Since fields // is a complex structure (an array), we'll need to // serialize it first for transport over HTTP. $postData = array(); $postData['fields'] = serialize(array_map(create_function('$col', 'return $col["index"];'), array_values($jqGridColumns))); // Determine if we're to be using a custom list, or if // the data will simply be action based. if (isset($custom_ids)) { if (!isset($action)) $action = 'idlist'; $postData['idlist'] = serialize($custom_ids); } elseif (!isset($action)) { $action = null; } if (isset($custom_post_data)) { $postData['custom'] = serialize($custom_post_data); } // 'action' will ensure that the controller provides the // correct subset of data $postData['action'] = $action; if (isset($nolinks)) { $postData['nolinks'] = true; } // Perform column customizations. // This will largely be based off of the 'formatter' parameter, // but could be on any pertinent condition. foreach ($jqGridColumns AS &$col) { $default = array(); // Make sure every column has a name $default['name'] = preg_replace("/\./", '-', $col['index']); // Perform customization based on formatter if (isset($col['formatter'])) { if ($col['formatter'] === 'id') { // Switch currency over to our own custom formatting $col['formatter'] = array('--special' => 'idFormatter'); $default['width'] = 50; $default['align'] = 'center'; } elseif ($col['formatter'] === 'currency') { // Switch currency over to our own custom formatting $col['formatter'] = array('--special' => 'currencyFormatter'); $default['width'] = 85; $default['align'] = 'right'; } elseif ($col['formatter'] === 'date') { $default['formatoptions'] = array('newformat' => 'm/d/Y'); $default['width'] = 95; $default['align'] = 'center'; } elseif ($col['formatter'] === 'name' || $col['formatter'] === 'longname') { $default['width'] = 100; if ($col['formatter'] === 'longname') $default['width'] *= 1.5; // No special formatting for name unset($col['formatter']); } elseif ($col['formatter'] === 'comment') { $default['width'] = 300; $default['sortable'] = false; // No special formatting for comment unset($col['formatter']); } } $col = array_merge($default, $col); } // Set the default sort column if (isset($sort_column)) { $sortname = $jqGridColumns[$sort_column]; } else { reset($jqGridColumns); $sortname = current($jqGridColumns); } $sortname = $sortname['index']; // Set the default sort order if (isset($sort_order)) { $sortorder = $sort_order; } else { $sortorder = 'ASC'; } if (1) { // debug $caption .= ' :: '; } // Configure the grid setup, giving priority to user defined parameters $jqGrid_setup = array_merge (array('mtype' => 'GET', 'datatype' => 'xml', 'url' => $url, 'postData' => $postData, 'colNames' => array_keys($jqGridColumns), 'colModel' => array('--special' => $jqGridColumns), 'height' => $height, 'rowNum' => $limit, 'rowList' => $limitOptions, 'sortname' => $sortname, 'sortorder' => $sortorder, 'caption' => $caption, 'imgpath' => $imgpath, 'viewrecords' => true, 'pager' => $grid_id.'-pager', 'loadComplete' => array('--special' => "function() {url=jQuery('#{$grid_id}').getGridParam('url');url=url.replace(/\/debug.*$/,'?'); pd=jQuery('#{$grid_id}').getPostData();$.each(pd,function(i){ url+=i+'='+escape(pd[i])+'&'; }); jQuery('#{$grid_id}-query').html('Grid Query
');}"), 'loadError' => array('--special' => "function(xhr,st,err) {url=jQuery('#{$grid_id}').getGridParam('url');url=url.replace(/\/debug.*$/,'?'); pd=jQuery('#{$grid_id}').getPostData();$.each(pd,function(i){ url+=i+'='+escape(pd[i])+'&'; }); jQuery('#{$grid_id}-query').html('Grid Error Query
');}"), ), $grid_setup ); //pr(compact('grid_setup', 'jqGrid_setup')); // OK, now that everything is in place, get out of PHP mode, // and add the javascript code (along with a touch of HTML) // to kick this thing off. ?>
0) { echo('
Search By:
' . "\n"); echo(''. 'Enable Autosearch' . '
' . "\n"); foreach ($search_fields AS $field) { echo($field . "
\n"); echo('' . "\n"); echo('
' . "\n"); } echo('
' . "\n"); echo('' . "\n"); echo('
' . "\n"); echo('
' . "\n"); } // Finally, back to HTML mode, and end the grid DIV we created ?>