ThinkPHP
发布时间:2022-04-12 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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属性用于自定义列
BACkground-color: #ccffcc">1.datatables 的js代码为:
{
processing: true,serverSide: true,ajax:
{
"url":"
{:U('Msg/index')}","data":function(d)
{ //额外传递的参数
d.mintime = $('#logmin').val(
);
d.maxtime = $('#logmax').val(
);
}
},bStateSave: true,//状态保存
aLengthMenu : [20,30,50,100,1
50],bProcessing : true,bAutoWidth:
false,bFilter : true,//是否启动过滤、搜索功能
bInfo : true,//是否显示页脚信息,DataTables插件左下角显示记录数
createdRow: function ( row,data,index )
{
$(row).addClass('text-c'
);
$('#count').html(data.recordsFiltered
);
},ao
columns: [
{
"sClass": "text-center","data": "id","render": function (data,type,full,meta)
{
return '
';
},"bSortable":
false
},
{ "mData": "id" },
{ "mData": "fromnickname"},
{ "mData": "content" },
{ "mData": "msgtype" },
{ "mData": "time"},
{
"sClass": "text-center",meta)
{
html = '
';
html += '
删除';
return html;
},"bSortable":
false
}
]
}
);
BACkground-color: #ccffcc">2.服务端方面:
column 要排序的单元格(从0开始,字段需要自己设置)
order.0.dir 排序(升序、降序)
start 起始条数(第几条开始)
length 查询长度
返回的数据如下:
draw 返回前端传过来的值
records@R_117_1
0586@l 记录总条数
recordsFiltered 条件筛选后的记录总条数
data 服务端查询的数据
返回数据形式:json
BACkground-color: #ccffcc">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
$records@R_117_1
0586@l = $this->count(
);
//定义过滤条件查询过滤后的记录数sql
$recordsFiltered = $this->where($wher
E)->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($wher
E)
->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),"records@R_117_1
0586@l" => intval($records@R_117_1
0586@l),"recordsFiltered"=>intval($recordsFiltered),"data" => $result,
);
return $list;
}
3) 实现自定义ajax搜索
以WdatePicker插件为例(input框类似,绑定onchange事件即可):
{maxDate:'#F
{ $dp.$D(\'logmax\')||\'%y-%M-%d\'}',onpicked:function()
{table.fnFilter(
);}})" name="mintime" id="logmin" class="input-text Wdate" style="width
:120px;">
3. datatables中ajax属性中data属性定义额外要传递的参数
例子:
{
"url":"
{:U('Msg/index')}","data":function(d)
{ //额外传递的参数
d.mintime = $('#logmin').val(
);
d.maxtime = $('#logmax').val(
);
}
4) 代码截图:
a. html页面
![ThinkPHP整合datatables实现服务端分页的示例代码 ThinkPHP整合datatables实现服务端分页的示例代码](https://files.jb51.cc/file_images/article/201802/20180210103329.jpg)
b.js部分
![ThinkPHP整合datatables实现服务端分页的示例代码 ThinkPHP整合datatables实现服务端分页的示例代码](https://files.jb51.cc/file_images/article/201802/20180210103403.jpg)
以上这篇Thinkphp整合datatables实现服务端分页的示例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持菜鸟教程。
大佬总结
以上是大佬教程为你收集整理的ThinkPHP整合datatables实现服务端分页的示例代码全部内容,希望文章能够帮你解决ThinkPHP整合datatables实现服务端分页的示例代码所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。