dataTables服务器模式(thinkphp5.0后端代码)

怎么使用dataTables我就不说了,按照官网教程去引入必须的css文件和js文件就行了,
这里主要谈下他的服务器处理Server-side
下面是HTML页面

1
2
<table id="myTable" class="display" cellspacing="0" width="100%">
</table>

下面是js页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
$(document).ready(function () {
$('#myTable').DataTable({
processing: true,
serverSide: true,
// __PATH__ = "http://localhost/php/think/index.php"
ajax: __PATH__ + '/medicine/query',
columns: [
{
"title": "编号",
},
{
"title": "药品名称",
},
{
"title": "简介",
},
{
"title": "产地",
},
{
"title": "类别",
},
{
"title": "规格",
},
{
"title": "库存",
},
{
"title": "单位",
},
{
"title": "进价",
},
{
"title": "售价",
},
{
"title": "创建时间",
},
{
"title": "更新时间",
},
{
"title": "录入",
}
],
//配置语言
language: {
url:__PUBLIC__+'/lang/chinese.json'
},
jQueryUI: true,
select:true,//select 扩展
dom: 'rt<"bottom"flp><"clear">',
autoWidth: true
});
})

下面是http://localhost/php/think/index.php/medicine/query的php代码

1
2
3
4
5
6
7
8
public function query(){
$table = 'medicine';
$fields = MedModel::getTableFields([
'table' => config("database.prefix").$table
]);
$rs = Datatables::simple($_GET,$table,$fields);
return json( $rs );
}

然后上面使用的我自己封装的Datatables类,下面是详细代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
namespace app\index\controller;
use think\Db;
class Datatables{
//简单例子
public static function simple($request,$table,$columns){
//获取datatables发送的draw参数,会发给前台
$draw = $request['draw'];
//分页和排序的参数
$order_name = $columns[$request['order'][0]['column']];
$order_dir = $request['order'][0]['dir'];
$limit_start = $request['start'];
$limit_lenght = $request['length'];
//查询后的总条数
$recordsTotal = Db::name($table)->count();
//从前台传过来的搜索条件
$where = $request['search']['value'];
//有查询条件的情况
if(strlen($where) > 0){
$whereStr = implode('|',$columns);
$data = Db::name($table)
->where($whereStr,'like',"%$where%")
->order($order_name,$order_dir)
->limit($limit_start,$limit_lenght)
->select();
$recordsFitered = count($data); //过滤后的数量
//无查询条件的情况
}else{
$data = Db::name($table)
->order($order_name,$order_dir)
->limit($limit_start,$limit_lenght)
->select();
$recordsFitered = $recordsTotal;
}
$arrayData = self::arrayAccess($data,$columns);
//返回下面这种格式的数据出去
return [
'draw' => intval($draw),
'recordsTotal' => intval($recordsTotal),
'recordsFiltered' => intval($recordsFitered),
'data' => $arrayData
];
}
//把对象格式的转化成数组格式
private static function arrayAccess($obj,$columns){
$arrayData = [];
foreach ($obj as $key=>$val){
$arr = [];
for($i=0,$len=count($columns);$i<$len;$i++){
$item = $columns[$i];
$arr[] = $val[$item];
}
$arrayData[] = $arr;
}
return $arrayData;
}
}

那么生成的具体样式如下

好了,大概就是这些,不过尽量结合官方的ajax发送的格式和返回的格式来看,还有什么不懂的或需要源码的,请在下面留言,我会定期答复!