多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
本文所讲的 datatable 讲述的是 bootstrap-table 插件。我在项目中就是使用这个插件,很是好用。下面记录一下,我是怎么用这些插件的。 **我们首先从 html 中使用 bootstrap-table 开始讲** > 本文介绍的 bootstrap-table 版本是 v1.9.0 下载 bootsrap-table 像如下的文件结构: ![](https://box.kancloud.cn/89268607270a68ec12b5d73ec03dff90_389x183.jpg) 放置好之后,我们看看,页面中如何使用,规划好,在 Tools.php 中新建一个 bootstrapTable 控制器,并在 view\\tools 下面新建一个 bootstraptable.html 页面。 ~~~ <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>bootstrap-table 功能展示</title> <link href="/static/bootstrap/css/bootstrap.min.css" rel="stylesheet"> <link href="/static/bootstrap-table/bootstrap-table.min.css" rel="stylesheet"> </head> <body> <div class="wrapper wrapper-content animated fadeInRight"> <!-- Panel Other --> <div class="ibox float-e-margins"> <div class="ibox-title"> <h5>城市列表</h5> </div> <div class="ibox-content"> <!--搜索框开始--> <form id='commentForm' role="form" method="post" class="form-inline"> <div class="content clearfix m-b"> <div class="form-group"> <label>地区名称:</label> <input type="text" class="form-control" id="aname" name="aname"> </div> <div class="form-group"> <button class="btn btn-primary" type="button" id="search"><strong>搜 索</strong> </button> </div> </div> </form> <!--搜索框结束--> <div class="hr-line-dashed"></div> <div class="example-wrap" style="margin-top:20px"> <div class="example"> <table id="cusTable"> <thead> <th data-field="id">地区ID</th> <th data-field="name">地区名称</th> <th data-field="operate">操作</th> </thead> </table> </div> </div> <!-- End Example Pagination --> </div> </div> </div> <script src="/static/js/jquery.min.js?v=2.1.4"></script> <script src="/static/bootstrap-table/bootstrap-table.min.js"></script> <script src="/static/bootstrap-table/bootstrap-table-mobile.min.js"></script> <script src="/static/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script> <script src="/static/layer/layer.js"></script> <script> function initTable() { //先销毁表格 $('#cusTable').bootstrapTable('destroy'); //初始化表格,动态从服务器加载数据 $("#cusTable").bootstrapTable({ method: "get", //使用get请求到服务器获取数据 url: "{:url('tools/bootstrapTable')}", //获取数据的地址 striped: true, //表格显示条纹 pagination: true, //启动分页 pageSize: 10, //每页显示的记录数 pageNumber:1, //当前第几页 pageList: [5, 10, 15, 20, 25], //记录数可选列表 sidePagination: "server", //表示服务端请求 //设置为undefined可以获取pageNumber,pageSize,searchText,sortName,sortOrder //设置为limit可以获取limit, offset, search, sort, order queryParamsType : "undefined", queryParams: function queryParams(params) { //设置查询参数 var param = { pageNumber: params.pageNumber, pageSize: params.pageSize, aname:$('#aname').val() }; return param; }, onLoadSuccess: function(){ //加载成功时执行 layer.msg("加载成功", {time : 1000}); }, onLoadError: function(){ //加载失败时执行 layer.msg("加载数据失败"); } }); } $(document).ready(function () { //调用函数,初始化表格 initTable(); //当点击查询按钮的时候执行 $("#search").bind("click", initTable); }); </script> </body> </html> ~~~ 这是一个基础的展示页面,我们分别说明一下,具体的用法。 页面中的 table 展示容器 以及展示的 具体数据由,下面的代码来控制: ~~~ <table id="cusTable"> <thead> <th data-field="id">地区ID</th> <th data-field="name">地区名称</th> <th data-field="operate">操作</th> </thead> </table> ~~~ 你后台传来的 是什么字段 此处的**data-field**就应该填写 和 后台渲染的 数据完全相同的字段名。 主要的表格渲染函数是 initTable ,其中有很多的配置项,在这里面,我也写了很多的 注释,相信你也很容易进行理解。这里你主要关心的是 ~~~ url: "{:url('tools/bootstrapTable')}", //获取数据的地址 ~~~ url 填写你表格需要数据的接口,而且接口的 数据格式必须为: ![](https://box.kancloud.cn/c18c8c6191605ccc9b0f59d06974a016_642x407.jpg) total 表示的是总数据,rows 中存放查询需要渲染的数据。 **pageSize**: 10, //每页显示的记录数 这个参数 可以根据自己的实际需要,填写你要多少条数据分一页。 ~~~ queryParams: function queryParams(params) { //设置查询参数 var param = { pageNumber: params.pageNumber, pageSize: params.pageSize, aname:$('#aname').val() }; return param; }, ~~~ 这部分,配置的时,随着你的 请求 url 一起传递给后台的参数,后台可以接收到 这些参数之后,根据传递的参数,做出相应的操作。 > 此处的 搜索操作参数、分页的页面、每页展示多少条数据 都是在此处传递给后台。 下面这部分代码,就是页面加载完成之后,触发页面进行表格渲染的主要地方: ~~~ $(document).ready(function () { //调用函数,初始化表格 initTable(); //当点击查询按钮的时候执行 $("#search").bind("click", initTable); }); ~~~ 好了,前台部分,大致的将完了,让我们来看一下,接口该如何写吧。Tools.php 中的 bootstrapTable 方法: ~~~ // bootstrap-table public function bootstrapTable() { if(request()->isAjax()){ $param = input('param.'); $where = ''; if(!empty($param['aname'])){ $where['name'] = $param['aname']; } $limit = $param['pageSize']; $offset = ($param['pageNumber'] - 1) * $limit; // 此处自己处理分页,不采用官方的分页函数 $selectResult = db('area')->where($where)->limit($offset, $limit)->select(); foreach($selectResult as $key=>$vo){ $selectResult[$key]['operate'] = '<button class="btn btn-info" type="button">编辑</button>'; } $return['total'] = db('area')->where($where)->count(); //总数据 $return['rows'] = $selectResult; return json($return); } return $this->fetch(); } ~~~ 好了,让我们访问[http://www.phper.com/index/tools/bootstraptable](http://www.phper.com/index/tools/bootstraptable)看看效果吧: ![](https://box.kancloud.cn/6c36e5dcb56d4c58d58c23541311c843_1920x698.jpg) 是不是很棒,一个异步渲染的表格就这么的出现了。分页功能也都完好。不过,你会发现,此时的分页部分,没有上一页 下一页 以及首页 尾页等汉字标识,虽然通过 > 和 >> 进行了标识,但是依旧不够直观。那么怎么才能让它汉化呢?其实也非常的简单,只要在 initTable 中加入如下的配置: ~~~ paginationFirstText: "首页", paginationPreText: "上一页", paginationNextText: "下一页", paginationLastText: "尾页", ~~~ ![](https://box.kancloud.cn/2570ded4204aaa6e84eecf170f3559be_375x53.jpg)