如何在Laravel项目中整合并使用DataTables插件?
- 内容介绍
- 相关推荐
本文共计1631个文字,预计阅读时间需要7分钟。
DataTables 是一个 jQuery 表格插件,记录以下在 Laravel 中使用 DataTables 的常用功能和用法,如 AJAX 获取数据、自定义搜索、效果展示、选项说明等,详细步骤请查看以下内容。
DataTables 是一个 jQuery 的表格插件,记录一下在 Laravel 中使用的常用功能和用法,比如 ajax 获取数据,自定义搜索,效果展现,选项说明等等,有一些细节记录下来方便以后查看。
Laravel 控制器方法
接受 ajax get 请求,返回数据。
dataTables 会自带一些参数过来,需要按照格式返回数据,比如分页等。见 dataTables 官方文档说明。
代码如下:
// 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, [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, [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); }
dataTables 发 ajax 请求及一些选项设置
columnDefs 用来自定义每个字段如何展现,可以封装自己的展现逻辑,也可以获取到这一行各个字段的值。
createdRow 可以改变创建每一行的行为,比如修改这一行的样式等等。
table.draw() 方法可以重新发起 ajax 请求。
<script type="text/javascript"> $dataTable = $("#dataTable"); var table = $dataTable.DataTable({ "processing": true, "serverSide": true, "pageLength": 25, "lengthMenu": [10, 25, 50, 75, 100, 200], "ajax": { "url": "{{ route('audit.getList') }}", "data": function (data) { data.dynamic_type = "{{ Request::get('dynamic_type', 1) }}"; data.group_id = $("#group_id").val(); data.dynamic_id = $("#dynamic_id").val(); data.userid = $("#userid").val(); data.is_audit = $("#is_audit").val(); data.t = "{{ time() }}"; } }, "columns": [ {"data": "id"}, {"data": "userid"}, {"data": "group_id"}, {"data": "dynamic_type"}, {"data": "dynamic_id"}, {"data": "content"}, {"data": "images"}, {"data": "money"}, {"data": "is_audit"}, {"data": "audited_at"} ], "columnDefs": [ { "render": function (data, type, row) { if (data == 1) { return "活动"; } else if (data == 2) { return "动态"; } }, "targets": 3 }, { "render": function (data, type, row) { html = ""; $.each(data, function (k, v) { html += "<a href='" + v.origin + "' target='_blank'><img src='" + v.origin + "' width='160' style='margin-bottom: 2px;'>"; }); return html; }, "targets": 6 }, { "render": function (data, type, row) { if (data == 0) { return "未审核"; } else if (data == 1) { return "审核通过"; } else if (data == -1) { return "审核不通过"; } }, "targets": 8 }, { "render": function (data, type, row) { if (row.is_audit == 0) { return "<a class='btn btn-primary audit' data-type = 1>通过</a> <a class='btn btn-danger audit' data-type = 2>不通过</a>"; } return "-"; }, "targets": 10 } ], "createdRow": function (row, data, index) { $('td', row).eq(4).attr('style', 'word-break:break-all'); $('td', row).eq(2).attr('style', 'word-break:break-all'); $('td', 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, type, userid, group_id, dynamic_id, dynamic_type) }); // 审核操作 function audit(id, type, userid, group_id, dynamic_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> <script type="text/javascript"> $dataTable = $("#dataTable"); var table = $dataTable.DataTable({ "processing": true, "serverSide": true, "pageLength": 25, "lengthMenu": [10, 25, 50, 75, 100, 200], "ajax": { "url": "{{ route('audit.getList') }}", "data": function (data) { data.dynamic_type = "{{ Request::get('dynamic_type', 1) }}"; data.group_id = $("#group_id").val(); data.dynamic_id = $("#dynamic_id").val(); data.userid = $("#userid").val(); data.is_audit = $("#is_audit").val(); data.t = "{{ time() }}"; } }, "columns": [ {"data": "id"}, {"data": "userid"}, {"data": "group_id"}, {"data": "dynamic_type"}, {"data": "dynamic_id"}, {"data": "content"}, {"data": "images"}, {"data": "money"}, {"data": "is_audit"}, {"data": "audited_at"} ], "columnDefs": [ { "render": function (data, type, row) { if (data == 1) { return "活动"; } else if (data == 2) { return "动态"; } }, "targets": 3 }, { "render": function (data, type, row) { html = ""; $.each(data, function (k, v) { html += "<a href='" + v.origin + "' target='_blank'><img src='" + v.origin + "' width='160' style='margin-bottom: 2px;'>"; }); return html; }, "targets": 6 }, { "render": function (data, type, row) { if (data == 0) { return "未审核"; } else if (data == 1) { return "审核通过"; } else if (data == -1) { return "审核不通过"; } }, "targets": 8 }, { "render": function (data, type, row) { if (row.is_audit == 0) { return "<a class='btn btn-primary audit' data-type = 1>通过</a> <a class='btn btn-danger audit' data-type = 2>不通过</a>"; } return "-"; }, "targets": 10 } ], "createdRow": function (row, data, index) { $('td', row).eq(4).attr('style', 'word-break:break-all'); $('td', row).eq(2).attr('style', 'word-break:break-all'); $('td', 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, type, userid, group_id, dynamic_id, dynamic_type) }); // 审核操作 function audit(id, type, userid, group_id, dynamic_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>
本文主要记录给自己看,不做具体的说明了。
参考链接
dataTables 官方文档
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。
本文共计1631个文字,预计阅读时间需要7分钟。
DataTables 是一个 jQuery 表格插件,记录以下在 Laravel 中使用 DataTables 的常用功能和用法,如 AJAX 获取数据、自定义搜索、效果展示、选项说明等,详细步骤请查看以下内容。
DataTables 是一个 jQuery 的表格插件,记录一下在 Laravel 中使用的常用功能和用法,比如 ajax 获取数据,自定义搜索,效果展现,选项说明等等,有一些细节记录下来方便以后查看。
Laravel 控制器方法
接受 ajax get 请求,返回数据。
dataTables 会自带一些参数过来,需要按照格式返回数据,比如分页等。见 dataTables 官方文档说明。
代码如下:
// 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, [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, [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); }
dataTables 发 ajax 请求及一些选项设置
columnDefs 用来自定义每个字段如何展现,可以封装自己的展现逻辑,也可以获取到这一行各个字段的值。
createdRow 可以改变创建每一行的行为,比如修改这一行的样式等等。
table.draw() 方法可以重新发起 ajax 请求。
<script type="text/javascript"> $dataTable = $("#dataTable"); var table = $dataTable.DataTable({ "processing": true, "serverSide": true, "pageLength": 25, "lengthMenu": [10, 25, 50, 75, 100, 200], "ajax": { "url": "{{ route('audit.getList') }}", "data": function (data) { data.dynamic_type = "{{ Request::get('dynamic_type', 1) }}"; data.group_id = $("#group_id").val(); data.dynamic_id = $("#dynamic_id").val(); data.userid = $("#userid").val(); data.is_audit = $("#is_audit").val(); data.t = "{{ time() }}"; } }, "columns": [ {"data": "id"}, {"data": "userid"}, {"data": "group_id"}, {"data": "dynamic_type"}, {"data": "dynamic_id"}, {"data": "content"}, {"data": "images"}, {"data": "money"}, {"data": "is_audit"}, {"data": "audited_at"} ], "columnDefs": [ { "render": function (data, type, row) { if (data == 1) { return "活动"; } else if (data == 2) { return "动态"; } }, "targets": 3 }, { "render": function (data, type, row) { html = ""; $.each(data, function (k, v) { html += "<a href='" + v.origin + "' target='_blank'><img src='" + v.origin + "' width='160' style='margin-bottom: 2px;'>"; }); return html; }, "targets": 6 }, { "render": function (data, type, row) { if (data == 0) { return "未审核"; } else if (data == 1) { return "审核通过"; } else if (data == -1) { return "审核不通过"; } }, "targets": 8 }, { "render": function (data, type, row) { if (row.is_audit == 0) { return "<a class='btn btn-primary audit' data-type = 1>通过</a> <a class='btn btn-danger audit' data-type = 2>不通过</a>"; } return "-"; }, "targets": 10 } ], "createdRow": function (row, data, index) { $('td', row).eq(4).attr('style', 'word-break:break-all'); $('td', row).eq(2).attr('style', 'word-break:break-all'); $('td', 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, type, userid, group_id, dynamic_id, dynamic_type) }); // 审核操作 function audit(id, type, userid, group_id, dynamic_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> <script type="text/javascript"> $dataTable = $("#dataTable"); var table = $dataTable.DataTable({ "processing": true, "serverSide": true, "pageLength": 25, "lengthMenu": [10, 25, 50, 75, 100, 200], "ajax": { "url": "{{ route('audit.getList') }}", "data": function (data) { data.dynamic_type = "{{ Request::get('dynamic_type', 1) }}"; data.group_id = $("#group_id").val(); data.dynamic_id = $("#dynamic_id").val(); data.userid = $("#userid").val(); data.is_audit = $("#is_audit").val(); data.t = "{{ time() }}"; } }, "columns": [ {"data": "id"}, {"data": "userid"}, {"data": "group_id"}, {"data": "dynamic_type"}, {"data": "dynamic_id"}, {"data": "content"}, {"data": "images"}, {"data": "money"}, {"data": "is_audit"}, {"data": "audited_at"} ], "columnDefs": [ { "render": function (data, type, row) { if (data == 1) { return "活动"; } else if (data == 2) { return "动态"; } }, "targets": 3 }, { "render": function (data, type, row) { html = ""; $.each(data, function (k, v) { html += "<a href='" + v.origin + "' target='_blank'><img src='" + v.origin + "' width='160' style='margin-bottom: 2px;'>"; }); return html; }, "targets": 6 }, { "render": function (data, type, row) { if (data == 0) { return "未审核"; } else if (data == 1) { return "审核通过"; } else if (data == -1) { return "审核不通过"; } }, "targets": 8 }, { "render": function (data, type, row) { if (row.is_audit == 0) { return "<a class='btn btn-primary audit' data-type = 1>通过</a> <a class='btn btn-danger audit' data-type = 2>不通过</a>"; } return "-"; }, "targets": 10 } ], "createdRow": function (row, data, index) { $('td', row).eq(4).attr('style', 'word-break:break-all'); $('td', row).eq(2).attr('style', 'word-break:break-all'); $('td', 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, type, userid, group_id, dynamic_id, dynamic_type) }); // 审核操作 function audit(id, type, userid, group_id, dynamic_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>
本文主要记录给自己看,不做具体的说明了。
参考链接
dataTables 官方文档
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。

