Взгляните на мою сетку; В последнем рассмотренном столбце возвращается значение tiny int (0 или 1) из базы данных MySQL. То, что я пытаюсь достичь, – это отображать только строки, в которых рассматривается = 0, и по-прежнему использовать поиск для выполнения запроса и получения полей, где рассматривается = 1 . Я хочу отображать строки, где review = 0, когда сетка изначально загружается. Я попытался сделать эту серверную часть, используя код типа "SELECT * FROM table WHERE reviewed = 0"
. В этом случае запрос работает, но поиск не работает. Есть ли способ сделать это на клиенте? Пожалуйста, помогите мне в решении этой проблемы в течение нескольких дней. Я попробовал почти все.
Here's my server side code; //Get the requested page $page = $_GET['page']; //Get how many rows we want to have into the grid $limit = $_GET['rows']; // get index row - ie user click to sort. At first time sortname parameter - // after that the index from colModel $sidx = $_GET['sidx']; // sorting order - at first time sortorder $sord = $_GET['sord']; // if we not pass at first time index use the first column for the index or what you want if(!$sidx) $sidx =1; //array to translate the search type $ops = array( 'eq'=>'=', //equal 'ne'=>'<>',//not equal 'lt'=>'<', //less than 'le'=>'<=',//less than or equal 'gt'=>'>', //greater than 'ge'=>'>=',//greater than or equal 'bw'=>'LIKE', //begins with 'bn'=>'NOT LIKE', //doesn't begin with 'in'=>'LIKE', //is in 'ni'=>'NOT LIKE', //is not in 'ew'=>'LIKE', //ends with 'en'=>'NOT LIKE', //doesn't end with 'cn'=>'LIKE', // contains 'nc'=>'NOT LIKE' //doesn't contain ); function getWhereClause($col, $oper, $val){ global $ops; if($oper == 'bw' || $oper == 'bn') $val .= '%'; if($oper == 'ew' || $oper == 'en' ) $val = '%'.$val; if($oper == 'cn' || $oper == 'nc' || $oper == 'in' || $oper == 'ni') $val = '%'.$val.'%'; return " WHERE $col {$ops[$oper]} '$val' "; } $where = ""; //if there is no search request sent by jqgrid, $where should be empty $searchField = isset($_GET['searchField']) ? $_GET['searchField'] : false; $searchOper = isset($_GET['searchOper']) ? $_GET['searchOper']: false; $searchString = isset($_GET['searchString']) ? $_GET['searchString'] : false; if ($_GET['_search'] == 'true') { $where = getWhereClause($searchField,$searchOper,$searchString); } mysql_query("SET NAMES 'utf8'"); // calculate the number of rows for the query. We need this for paging the result $result = mysql_query("SELECT COUNT(*) AS count FROM renal_apptRequest"); $row = mysql_fetch_array($result,MYSQL_ASSOC); $count = $row['count']; // calculate the total pages for the query if( $count > 0 && $limit > 0) { $total_pages = ceil($count/$limit); } else { $total_pages = 0; } // if for some reasons the requested page is greater than the total // set the requested page to total page if ($page > $total_pages) $page=$total_pages; // calculate the starting position of the rows $start = $limit*$page - $limit; // if for some reasons start position is negative set it to 0 // typical case is that the user type 0 for the requested page if($start <0) $start = 0; // the actual query for the grid data $SQL = "SELECT * FROM renal_apptRequest".$where." ORDER BY $sidx $sord LIMIT $start , $limit"; $result = mysql_query( $SQL ) or die("Couldn't execute query.".mysql_error());
Вот мой код на стороне клиента
$(function () { $("#list").jqGrid({ url:"grid_apptRequest.php", datatype: "json", mtype: "GET", colNames:["ID","Date","referralType","patientName","patientAddress","patientDOB","referralProvider","referralReason","contactName","contactPhone","contactEmail","contactFax","preferredTime","comments","reviewed"], colModel: [ { name: "id",index:'id', width: 55,search:true, formatter:'showlink',formatoptions:{baseLinkUrl:'renal_apptRequest_review.php', target:'_blank'}}, { name: "date",index:'date',search:true, width: 90 }, { name: "referralType",index:'referralType',search:true, width: 80}, { name: "patientName",index:'patientName',search:true, width: 120}, { name: "patientAddress",index:'patientAddress',search:true, width: 120}, { name: "patientDOB",index:'patientDOB',search:true, width: 90 }, { name: "referralProvider",index:'referralProvider',search:true, width: 90 }, { name: "referralReason",index:'referralReason',search:true, width: 120 }, { name: "contactName",index:'contactName',search:true, width: 100}, { name: "contactPhone",index:'contactPhone',search:true, width: 100}, { name: "contactEmail",index:'contactEmail',search:true, width: 100 }, { name: "contactFax",index:'contactFax',search:true, width: 80}, { name: "preferredTime",index:'preferredTime',search:true, width: 70 }, { name: "comments",index:'comments',search:true, width: 100 }, { name: "reviewed",index:'reviewed',search:true,hidedlg:true, width: 60, align: "right" } ], pager: "#pager", rowNum: 10, rowList: [10,20,30], autowidth:true, sortname: "id", sortorder: "asc", viewrecords: true, gridview: true, autoencode: true, caption: "Appointment Request", afterInsertRow: function (id, currentData, jsondata) { if(currentData.reviewed == 1){ $('#list').jqGrid('delRowData',id); } } }).navGrid("#pager", {search:true, edit:false,add:false,del:false,searchtext:"Search"});
Вот пример данных JSON, который заполняет мою сетку. Это делается на стороне сервера. $ cipher-> decryptThis () – это алгоритм дешифрования, используемый для дешифрования зашифрованных полей из базы данных.
$responce = new stdClass(); $responce->page = $page; $responce->total = $total_pages; $responce->records = $count; $i=0; while($row = mysql_fetch_array($result,MYSQL_ASSOC)) { $responce->rows[$i]['id']=$row['id']; $responce->rows[$i]['cell']=array($row['id'],$row['date'],$row['referralType'],$cipher->decryptThis($row['patientName']),$cipher->decryptThis($row['patientAddress']),$cipher->decryptThis($row['patientDOB']),$row['referralProvider'], $cipher->decryptThis($row['referralReason']),$cipher->decryptThis($row['contactName']) ,$cipher->decryptThis($row['contactPhone']),$cipher->decryptThis($row['contactEmail']), $row['contactFax'],$row['preferredTime'],$row['comments'], $row['reviewed'] ); $i++; } echo json_encode($responce);