在Laravel中使用DataTables插件的方法

DataTables 是一个 jQuery 的表格插件,记录一下在 Laravel 中使用的常用功能和用法,比如 ajax 获取数据,自定义搜索,效果展现,选项说明等等,有一些细节记录下来方便以后查看。

Laravel 控制器方法

接受 ajax get 请求,返回数据。

dataTables 会自带一些参数过来,需要按照格式返回数据,比如分页等。见 dataTables 官方文档说明。

代码如下:

get('dynamic_type'); $draw = $request->get('draw'); $start = $request->get('start'); $length = $request->get('length'); $groupId = $request->get('group_id'); $dynamicId = $request->get('dynamic_id'); $userid = $request->get('userid'); $isAudit = $request->get('is_audit',0);

if (!$dynamicType || !in_array($dynamicType,[1,2])) {
return response()->json(['error' => '缺少参数!']);
}

$builder = Dynamics::select(['id','userid','group_id','dynamic_id','dynamic_type','content','money','is_audit','audited_at'])->where('dynamic_type',$dynamicType);

//自定义搜索
if ($groupId) {
$builder->where('group_id',$groupId);
}

if ($dynamicId) {
$builder->where('dynamic_id',$dynamicId);
}

if ($userid) {
$builder->where('userid',$userid);
}

if (!is_null($isAudit)) {
$builder->where('is_audit',$isAudit);
}

$total = $builder->count();
$list = $builder->orderBy('id','desc')->offset($start)->take($length)->get()->toArray();

$imgInfo = [];
$dynamicIds = $this->getDynamicIds($list);
if ($dynamicIds) {
$imgInfo = DynamicImage::whereIn('dynamic_id',$dynamicIds)->pluck('images','dynamic_id');
}

$fillImages = function ($item) use ($imgInfo) {
if (isset($imgInfo[$item['dynamic_id']])) {
$item["images"] = json_decode($imgInfo[$item['dynamic_id']]);
} else {
$item["images"] = [];
}
return $item;
};
$list = array_map($fillImages,$list);

$data = [];
$data["draw"] = $draw;
$data["recordsTotal"] = $total;
$data["recordsFiltered"] = $total;
$data["data"] = $list;
return response()->json($data);
}

// ajax GET 获取列表数据
public function getList(Request $request)
{
$dynamicType = $request->get('dynamic_type');
$draw = $request->get('draw');
$start = $request->get('start');
$length = $request->get('length');
$groupId = $request->get('group_id');
$dynamicId = $request->get('dynamic_id');
$userid = $request->get('userid');
$isAudit = $request->get('is_audit',0);

if (!$dynamicType || !in_array($dynamicType,2])) {
return response()->json(['error' => '缺少参数!']);
}

$builder = Dynamics::select(['id',$dynamicType);

//自定义搜索
if ($groupId) {
$builder->where('group_id',$groupId);
}

if ($dynamicId) {
$builder->where('dynamic_id',$dynamicId);
}

if ($userid) {
$builder->where('userid',$userid);
}

if (!is_null($isAudit)) {
$builder->where('is_audit',$isAudit);
}

$total = $builder->count();
$list = $builder->orderBy('id','desc')->offset($start)->take($length)->get()->toArray();

$imgInfo = [];
$dynamicIds = $this->getDynamicIds($list);
if ($dynamicIds) {
$imgInfo = DynamicImage::whereIn('dynamic_id','dynamic_id');
}

$fillImages = function ($item) use ($imgInfo) {
if (isset($imgInfo[$item['dynamic_id']])) {
$item["images"] = json_decode($imgInfo[$item['dynamic_id']]);
} else {
$item["images"] = [];
}
return $item;
};
$list = array_map($fillImages,$list);

$data = [];
$data["draw"] = $draw;
$data["recordsTotal"] = $total;
$data["recordsFiltered"] = $total;
$data["data"] = $list;
return response()->json($data);
}

dataTables 发 ajax 请求及一些选项设置

columnDefs 用来自定义每个字段如何展现,可以封装自己的展现逻辑,也可以获取到这一行各个字段的值。

createdRow 可以改变创建每一行的行为,比如修改这一行的样式等等。

table.draw() 方法可以重新发起 ajax 请求。

"; }); return html; },"targets": 6 },row) { if (data == 0) { return "未审核"; } else if (data == 1) { return "审核通过"; } else if (data == -1) { return "审核不通过"; } },"targets": 8 },row) { if (row.is_audit == 0) { return "通过 不通过"; } return "-"; },"targets": 10 } ],"createdRow": function (row,data,index) { $('td',row).eq(4).attr('style','word-break:break-all'); $('td',row).eq(2).attr('style',row).eq(5).attr('style','word-break:break-all'); },"language": { processing: "数据加载中...",info: "显示第 _START_ 至 _END_ 条,共 _TOTAL_ 条记录",infoEmpty: "暂无数据",lengthMenu: "显示 _MENU_ 条记录",paginate: { first: "首页",previous: "上一页",next: "下一页",last: "最后一页" } } });

$dataTable.find('tbody').on('click','.audit',function () {
var data = table.row($(this).parents('tr')).data();
var id = data.id;
var userid = data.userid;
var group_id = data.group_id;
var dynamic_id = data.dynamic_id;
var dynamic_type = data.dynamic_type;
var type = $(this).data('type');
audit(id,userid,group_id,dynamic_id,dynamic_type)
});

// 审核操作
function audit(id,dynamic_type) {
$.post("{{ route('audit.index') }}/" + id,{
id: id,type: type,userid: userid,group_id: group_id,dynamic_id: dynamic_id,dynamic_type: dynamic_type,_token: "{{ csrf_token() }}",_method: "PUT"
},function (data) {
if (data.result == 0) {
table.ajax.reload();
toastr.success("操作成功!");
}
});
}

$("#is_audit").select2({
placeholder: "请选择状态",minimumResultsForSearch: Infinity
});

// 搜索
$("#searchBtn").click(function(){
table.draw();
});

<script type="text/javascript">
$dataTable = $("#dataTable");
var table = $dataTable.DataTable({
"processing": true,last: "最后一页"
}
}
});

$dataTable.find('tbody').on('click',dynamic_type)
});

// 审核操作
function audit(id,function (data) {
if (data.result == 0) {
table.ajax.reload();
toastr.success("操作成功!");
}
});
}

$("#is_audit").select2({
placeholder: "请选择状态",minimumResultsForSearch: Infinity
});

// 搜索
$("#searchBtn").click(function(){
table.draw();
});

本文主要记录给自己看,不做具体的说明了。

参考链接

dataTables 官方文档

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


laravel的dd函数不生效怎么办
看不懂laravel文档咋办
安装laravel框架出现command怎么办
Laravel开发API怎么使用事务
laravel怎么构建复杂查询条件
laravel如何实现防止被下载
为什么laravel比yii火
一些常见的Laravel定时任务不运行的问题
laravel用路由有什么好处
composer无法安装laravel怎么办
laravel现在还用吗
laravel怎么替换主键id
laravel的appurl有什么用
如何修改Laravel的报错输出形式
laravel怎么避免foreach查表
laravel怎样操作数据库
laravel怎么截取字符串
laravel 是国内的吗
laravel怎么设置请求头
浅析Laravel社区Redis组件报错的问题和解决方法