ThinkPHP整合datatables实现服务端分页的示例代码
最近做东西有一个需求,因为数据量很大,在这里我决定使用datatables的服务端分页,同时还需要传递查询条件到服务端。在网上搜索的大部分文章都感觉有些误差,于是自己封装了一下,主要配置/工具为: 服务端:php(使用thinkphp) 页面样式来自于H-ui框架(datatables版本为1.10.0) 主要修改(databases)配置项为:1) bProcessing:true 使用ajax源 2) serverSide:true 使用服务端分页 3) createdRow:function(){} 回调函数,用于添加事件或类名 4) aoColumns 用于处理、显示数据,其中render属性用于自定义列 1.datatables 的js代码为: '; },"bSortable": false },{ "mData": "id" },{ "mData": "fromnickname"},{ "mData": "content" },{ "mData": "msgtype" },{ "mData": "time"},{ "sClass": "text-center",meta) { html = ''; html += '删除'; return html; },"bSortable": false } ] });2.服务端方面: 3.服务端后端完整代码如下: 1)控制器代码: getData(I('get.'));
$this->ajaxReturn($list);
}
$this->display();
}
2) Model层代码:(*其中,dealTime方法主要用于处理时间段) dealTime($timeArr);
//搜索框
$search = trim($data['search']['value']); //获取前台传过来的过滤条件
if(strlen($search) > 0) {
$where['id|fromnickname|content|msgtype'] = array('like','%'.$search.'%');
}
//定义查询数据总记录数sql
$recordsTotal = $this->count();
//定义过滤条件查询过滤后的记录数sql
$recordsFiltered = $this->where($where)->count();
//排序条件
$orderArr = [1=>'id',2=>'fromnickname',3=>'content',4=>'msgtype',5=>'time'];
//获取要排序的字段
$orderField = (empty($orderArr[$data['order']['0']['column']])) ? 'id' : $orderArr[$data['order']['0']['column']];
//需要空格,防止字符串连接在一块
$order = $orderField.' '.$data['order']['0']['dir'];
//按条件过滤找出记录
$result = [];
//备注:$data['start']起始条数 $data['length']查询长度
$result = $this->field('id,fromnickname,content,msgtype,time')
->where($where)
->order($order)
->limit(intval($data['start']),intval($data['length']))
->select();
//处理数据
if(!empty($result)) {
foreach ($result as $key => $value) {
$result[$key]['time'] = date("Y-m-d H:i:s",$value['time']);
$result[$key]['recordsFiltered'] = $recordsFiltered;
}
}
//拼接要返回的数据
$list = array(
"draw" => intval($draw),"recordsTotal" => intval($recordsTotal),"recordsFiltered"=>intval($recordsFiltered),"data" => $result,);
return $list;
}
3) 实现自定义ajax搜索 以WdatePicker插件为例(input框类似,绑定onchange事件即可): 3. datatables中ajax属性中data属性定义额外要传递的参数 例子: 4) 代码截图: a. html页面b.js部分以上这篇ThinkPHP整合datatables实现服务端分页的示例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程之家。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |