00001 <?php
00010 class tpGrid extends Plugin
00011 {
00012 var $guid = 0;
00013
00017 function tpGrid() {
00018 $this->Plugin();
00019 $this->depend('html','form');
00020 }
00021
00022 function build($url, $params)
00023 {
00024 assert_type($params['columns'], 'array');
00025
00026
00027 $url = $this->depends->html->composite_url($url, array(
00028 '_ajax' => 1,
00029 'cols' => urlencode(implode('&', array_keys($params['columns'])))
00030 ));
00031
00032 $gridcfg = array(
00033 'url' => $url,
00034 'datatype' => $this->_getparam($params, 'datatype', 'json'),
00035 'colModel' => array(),
00036 'height' => $this->_getparam($params, 'height', ''),
00037 'width' => $this->_getparam($params, 'width', ''),
00038 );
00039
00040 foreach($params['columns'] as $name=>$col) {
00041 $gridcfg['colNames'][] = $col['label'];
00042 $gcol = array(
00043 'display' => $col['label'],
00044 'name' => $name,
00045 'index' => $col['expr'] ? $col['expr'] : $name,
00046
00047
00048 );
00049
00050 $this->_optvar($col, 'width', $gcol);
00051 $this->_optvar($col, 'align', $gcol);
00052 $this->_optvar($col, 'date_format', $gcol, 'datefmt');
00053 $this->_optvar($col, 'editable', $gcol);
00054 $this->_optvar($col, 'search', $gcol, 'searchable');
00055 $this->_optvar($col, 'sortable', $gcol);
00056
00057 $grid['colModel'][] = $gcol;
00058 }
00059
00060 $tbl_id = $this->_getparam($params, 'grid_id', 'jqgrid'.++$this->guid);
00061 $pgr_id = $this->_getparam($params, 'pager_id', 'jqpager'.++$this->guid);
00062 $sch_id = $this->_getparam($params, 'search_id', 'jqsearch'.++$this->guid);
00063
00064 $html = '';
00065 $html .= '<div id="'.$sch_id.'" style="display:none"></div>';
00066 $html .= '<table id="'.$tbl_id.'" class="scroll" cellpadding="0" cellspacing="0"></table>';
00067 $html .= '<div id="'.$pgr_id.'" class="scroll" style="text-align:center"></div>';
00068
00069 $this->depends->html->js_load('jqgrid/jquery.jqGrid');
00070
00071 $this->depends->html->css_load('modal');
00072 $this->depends->html->js_load('jq/jquery.modal');
00073
00074 $js = 'var g = '.json_encode($grid).';';
00075
00076
00077 $js .= 'g.imgpath = "'.url('/img/jqgrid/basic').'";';
00078 $js .= 'g.pager = jQuery("#'.$pgr_id.'");';
00079
00080 $js .= 'jQuery("#'.$tbl_id.'").jqGrid(g)';
00081 $js .= '.navGrid("#'.$pgr_id.'", {edit:false, add:false, del:false})';
00082
00083 $js .= '.navButtonAdd("#'.$pgr_id.'", {caption:"Search", title:"Toggle Search", buttonimg:g.imgpath+"/find.gif", onClickButton:function(){ jQuery("#t_'.$tbl_id.'").show(); } })';
00084
00085
00086
00087 $js .= ';';
00088
00089
00090 $js .= 'jQuery("#t_'.$tbl_id.'").filterGrid("#'.$tbl_id.'", { gridModel:true, gridNames:false, gridToolbar:true, formtype:"horizontal", enableSearch:true, enableClear:false, autosearch:true, afterSearch:function() { jQuery(".HeaderButton").trigger("click"); jQuery("#'.$sch_id.'").css("display","none"); } } );';
00091 $js .= 'jQuery("#t_'.$tbl_id.'").hide();';
00092
00093
00094
00095
00096 $this->depends->html->js_run('', $js);
00097
00098
00099 $this->depends->html->css_load('jqgrid/basic');
00100
00101
00102 $html .= '<br><br><pre style="font-size:8pt" id="jsdbg"></pre>';
00103 $this->depends->html->js_load('beautify');
00104 $this->depends->html->js_run('', '$("#jsdbg").html(js_beautify(\''.str_replace("'", "\\'", $js).'\'));');
00105
00106
00107 return $html;
00108 }
00109
00115 function _optvar($src_arr, $src_key, &$dst_arr, $dst_key='')
00116 {
00117 if(empty($dst_key)) $dst_key = $src_key;
00118 if(isset($src_arr[$src_key])) $dst_arr[$dst_key] = $srt_arr[$src_key];
00119 }
00120
00125 function _getparam($params, $name, $default)
00126 {
00127 if(isset($params[$name])) {
00128 return $params[$name];
00129 }
00130 return $default;
00131 }
00132
00133 }
00134
00135 ?>