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 官方文档
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持免费资源网。
© 版权声明
THE END
暂无评论内容