zoukankan      html  css  js  c++  java
  • datatables服务器分页

    问题

    最近使用了bootstrap的datatables插件,但是在分页的时候遇到了问题。

    效果图

    这里写图片描述

    解决方法

    引入

    这部分就不讲了

    开启服务器模式

    $("#example1").DataTable({
        "serverSide": true,//开启服务器模式
        "ajax": "/admin/log/getLoginData",//ajax加载数据
    })

    api端

    <?php
    /**
     * Created by PhpStorm.
     * User: Administrator
     * Date: 2017/5/5 0005
     * Time: 14:38
     */
    
    namespace AppHttpControllersAdmin;
    
    
    use AppAdmin;
    use AppLoginLog;
    use AppOperateLog;
    use IlluminateHttpRequest;
    
    class LogController {
    
        //登录日志列表页面
        public function loginlog() {
            return view('admin.log.loginlog');
        }
    
        //获取分页信息
        private function getPageInfo(Request $request) {
            if (!empty($request->draw)) {
                $pageInfo = [];
                $pageInfo['draw'] = $request->draw;//绘制次数
                $pageInfo['start'] = $request->start;//当前第一条记录的开始处
                $pageInfo['length'] = $request->length;//查询多少条数据
                $username = $request->search['value'];
                $adminModel = new Admin();
                $pageInfo['search'] = $adminModel->searchByUsername($username);
                return $pageInfo;
            }
            return null;
        }
    
        //获取登录日志数据
        public function getLoginData(Request $request) {
            $pageInfo = $this->getPageInfo($request);//获取分页信息
            $logModel = new LoginLog();//创建模型
            $logs = $logModel->getLoginLog($pageInfo);//获取登录数据
            $count = $logModel->getCount($pageInfo);//获取记录数
            return json_encode(
                [
                    'draw' => $pageInfo['draw'],//datatables绘画id
                    'recordsTotal' => $count['total'],//总的记录数
                    'recordsFiltered' => $count['search'],//过滤后的记录数
                    'data' => $logs->toArray()//记录
                ]
            );//返回json数据
        }
    }

    这里使用的是Laravel框架,在请求getLoginData方法的时候,首先调用getPageInfo方法,获取到前端的分页信息,前端传来的前端分页信息主要包括:

    draw //绘制id,需要返回
    start //需要的记录数头
    length //需要多少个记录数
    search['value'] //搜索字符

    将分页信息组织起来存放在数组中返回给getLoginData方法。接着创建数据模型,调用数据模型的getLoginLog方法,就是根据分页信息获取指定数据,调用数据模型的getCount方法,就是更具分页信息获取记录数,最后按格式返回数据

    {
        "draw": "1",
        "recordsTotal": 20,
        "recordsFiltered": 19,
        "data": [
            {
                "id": 43,
                "adminid": 6,
                "logintime": 1495268271,
                "loginip": 2130706433,
                "area": "ip地址有误",
                "status": 1,
                "type": 1,
                "username": "admin",
                "loginipstr": "127.0.0.1",
                "logintimestr": "2017/05/20 16:17:51"
            },
            {
                "id": 42,
                "adminid": 6,
                "logintime": 1495262658,
                "loginip": 2130706433,
                "area": "ip地址有误",
                "status": 1,
                "type": 1,
                "username": "admin",
                "loginipstr": "127.0.0.1",
                "logintimestr": "2017/05/20 14:44:18"
            },
            {
                "id": 40,
                "adminid": 6,
                "logintime": 1495178020,
                "loginip": 2130706433,
                "area": "ip地址有误",
                "status": 1,
                "type": 1,
                "username": "admin",
                "loginipstr": "127.0.0.1",
                "logintimestr": "2017/05/19 15:13:40"
            },
            {
                "id": 39,
                "adminid": 6,
                "logintime": 1495107675,
                "loginip": 2130706433,
                "area": "ip地址有误",
                "status": 1,
                "type": 1,
                "username": "admin",
                "loginipstr": "127.0.0.1",
                "logintimestr": "2017/05/18 19:41:15"
            }
        ]
    }

    数据模型层(LogModel)

    <?php
    /**
     * Created by PhpStorm.
     * User: Administrator
     * Date: 2017/5/5 0005
     * Time: 14:39
     */
    
    namespace App;
    
    
    use IlluminateDatabaseEloquentModel;
    
    class LoginLog extends Model {
        public $timestamps = false;
        public $table = 'log_login';
    
        /**
         * 获取系统配置的个数
         * @param int $rid
         * @param null $pageInfo
         */
        public function getCount($pageInfo = null) {
            $count = [];
            $count['total'] = $this->count();
            if ($pageInfo['search'] == '') {//不存在搜索
                $count['search'] = $count['total'];
            } else {//存在搜索
                $count['search'] = $this->whereIn('adminid', $pageInfo['search'])->count();
            }
            return $count;
        }
    
    
        /**
         * 获取登录日志
         */
        public function getLoginLog($pageInfo = null) {
            if ($pageInfo == null) {//没有分页
                $logs = $this
                    ->join('admin', 'log_login.adminid', '=', 'admin.id')
                    ->select('log_login.*', 'admin.username')
                    ->orderBy('logintime', 'desc')
                    ->get();
            } else {//存在分页
                if ($pageInfo['search'] == '') {//不存在搜索
                    $logs = $this
                        ->join('admin', 'log_login.adminid', '=', 'admin.id')
                        ->select('log_login.*', 'admin.username')
                        ->orderBy('logintime', 'desc')
                        ->offset($pageInfo['start'])
                        ->limit($pageInfo['length'])
                        ->get();
                } else {//存在搜索
                    $logs = $this
                        ->join('admin', 'log_login.adminid', '=', 'admin.id')
                        ->whereIn('adminid', $pageInfo['search'])
                        ->select('log_login.*', 'admin.username')
                        ->orderBy('logintime', 'desc')
                        ->offset($pageInfo['start'])
                        ->limit($pageInfo['length'])
                        ->get();
                }
            }
            //转换数据格式
            foreach ($logs as $log) {
                $log->loginipstr = long2ip($log->loginip);
                $log->logintimestr = date("Y/m/d H:i:s", $log->logintime);
            }
            return $logs;
        }
    }

    在数据模型层主要就是查询数据,分情况查询数据,情况有:是否存在分页信息,是否存在搜索信息,然后返回数据。

    前端数据展示

    $("#example1").DataTable({
        "serverSide": true,//开启服务器模式
        "processing": true,//显示正在加载
        "sort": false,//不能排序
        "searchable": true,//可以搜索
        "language": {//国际化
            "zeroRecords": "没有找到记录",
            "processing": "正在加载数据...",
            "lengthMenu": "每页显示 _MENU_ 条记录",
            "info": "当前显示 _START_ 到 _END_ 条,共 _TOTAL_ 条记录",
            "infoEmpty": "当前显示 0 到 0 条,共 0 条记录",
            "infoFiltered": "(从 _MAX_ 条记录中筛选)",
            "search": "搜索",
            "searchPlaceholder": "登录名",
            "paginate": {
                "first": "第一页",
                "previous": " 上一页 ",
                "next": " 下一页 ",
                "last": " 最后一页 "
            }
        },
        "ajax": "/admin/log/getLoginData",//加载数据
        "columns": [//数据展示
            {"data": "id"},
            {"data": "username"},
            {
                "data": "status",
                "render": function (data) {
                    return data == 1 ? "登录成功" : "登录失败";
                }
            },
            {
                "data": "type",
                "render": function (data) {
                    return data == 1 ? "用户名成功" : "邮箱登录";
                }
            },
            {"data": "logintimestr"},
            {"data": "loginipstr"},
            {"data": "area"},
            {
                "data": null,
                "defaultContent": "",
                "render": function (data, type, row) {
                    return "<a href='#myModal' data-toggle='modal' data-id='" + data.id + "'>删除</a>";
                }
            }
        ],
    })
  • 相关阅读:
    mysql之SQL入门与提升(一)
    数据库的主键和外键
    mysql项目实战经验
    浅谈设计模式
    记录下sparkStream的做法(scala)
    hive-hbase-handler方式导入hive表数据到hbase表中
    订单风险系统BI
    关于maven 把插件依赖一起打包进jar问题
    一些hbase的shell查询语句
    关于hive表同步类型问题
  • 原文地址:https://www.cnblogs.com/cnsec/p/13407000.html
Copyright © 2011-2022 走看看