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 官方文档

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