Datatable是jQuery一个强大的插件,详见https://www.datatables.net/,下面本人略总结在CodeIghiter框架的前端使用datatable的方法。
常用的配置选项:
根据数据源、性能要求可以配置各种配置项,下面列举几个常用的选项:
列定义选项:
回调函数选项:
1.首先需要进行Datatables的一些基础配置:
“bServerSide”: true, “bProcessing”: true, //显示提示正在工作中 “bPaginage”: true, “sPaginationType”: “two_buttons”,
2.“sAjaxSource” :用来向DataTable指定加载的外部数据源(如果想使用现有的数据,请使用aoData)可以简单的提供一个可以用来获得资料url或者JSON对象,该对象必须包含aaData,作为表格的数据源。
<?PHP echo "\"sAjaxSource\": \"/xxxx/xxx/","; ?>
3.“fnServerData” :此参数可以修改默认功能,从服务器获取数据($.getJSON),这样更适合应用程序。
"fnServerData": function (sSource, aoData, fnCallback) { $.ajax ({ "dataType": "json", "type": "POST", "url": sSource, "data": aoData, "success": fnCallback }); },
4. 新版本Datatables与旧版本的不同:
1). “fnRender”: function (setting) { } "mRender": function (data, type, row) { } ;
2). "sPaginationType“: “two_buttons” or “full_numbers”
5. "fnPreDrawCallback": 在每一个表格draw事件发生前调用该函数,通过返回false来取消draw事件其它任何的返回值,包括undefined都会导致draw事件的发生。
Controller:
Controller负责将把view传递过来的paging,sorting,searching的信息判断整理,通过model获取data list传送给view显示。
//Paging: $iDisplayStart = $this->input->get_post('iDisplayStart', true); $iDisplayLength = $this->input->get_post('iDisplayLength', true); if(isset($iDisplayStart) && $iDisplayLength != '-1') { $this->db->limit($this->db->escape_str($iDisplayLength), $this->db->escape_str($iDisplayStart)); } //Ordering: $sTable = 'table_logs_event'; $aColumns = array('id', 'ack', 'datetime', 'category', 'level', 'dev_mac', 'log_evt'); $iSortCol_0 = $this->input->get_post('iSortCol_0', true); $iSortingCols = $this->input->get_post('iSortingCols', true); if(isset($iSortCol_0)) { for($j=0; $j<intval($iSortingCols); $j++) { $iSortCol = $this->input->get_post('iSortCol_'.$j, true); $bSortable = $this->input->get_post('bSortable_'.intval($iSortCol), true); $sSortDir = $this->input->get_post('sSortDir_'.$j, true); if($bSortable == 'true') { $this->db->order_by($aColumns[intval($this->db->escape_str($iSortCol))] , $this->db- >escape_str($sSortDir)); } } } //Filtering: $sSearch = $this->input->get_post('sSearch', true); if(isset($sSearch) && !empty($sSearch)) { for($i=0; $i<count($aColumns); $i++) { $bSearchable = $this->input->get_post('bSearchable_'.$i, true); //单行排序 if(isset($bSearchable) && $bSearchable == 'true') { if ( $criteria == "unread" ) $this->db->or_like($aColumns[$i], $this->db->having('ack', 0)->escape_like_str($sSearch)); else $this->db->or_like($aColumns[$i], $this->db->escape_like_str($sSearch)); } } }
Model:
Model负责从数据表获取Data list,以及所有需要显示的信息。
$this->db->select('SQL_CALC_FOUND_ROWS '.str_replace(' , ', ' ', implode(', ', $aColumns)), false); if ( $criteria == "unread" ) { $this->db->where('ack', 0); } $query = $this->db->get($sTable); $this->db->select('FOUND_ROWS() AS found_rows'); $iFilteredTotal = $this->db->get()->row()->found_rows; $iTotal = $this->db->count_all($sTable); $output = array( "sEcho" => intval($sEcho), //页面传递用以标记的参数 “iTotalRecords” => $iTotal, //总的数据条数 “iTotalDisplayRecords” => $iFilteredTotal, //获取显示在页面上的数据条数 “aaData” => array() //获取data list );