基于layui2和thinkphp5项目开发心得记录(一)

本文记录使用layui2和thinkphp5开发项目时的心得,涉及前端表格显示、参数传递、PHP批量生成word及压缩包,以及解决URL长度限制问题。通过监听layui表格选择,获取选中项ID,传递到后台生成word模板,并最终优化为生成压缩包下载。
摘要由CSDN通过智能技术生成

写这系列的文章目的无他,仅仅是用以记录自己写项目的一些思路和心得,在开发过程中代码是以实现为首要目的,写得并不会非常美观实用,代码会在后期不断调试更改,文章也会进行不定期更新。未经作者允许请勿转载。

最新更新:2018/7/26

功能需求:选取页面表格信息,批量生成word文件 

相关技术点

  • 前端layui表格的数据显示与后台json接口
  • 页面与页面之间的参数传递,页面与后台之间的参数传递
  • php批量生成word文件(数组循环遍历、字符串与数组转化、js中window.location.search的用法和作用。)
  • html样式对word影响
  • 浏览器文件下载

首先是用一个layui表格对数据进行展示,html页面写个table标签,给个id

<table class="layui-table"  id="projtb"  lay-filter="filtertb"></table>

 按照layui框架的规则,在JS中对表格的表头值进行规定,field是与数据库对应的字段值,title是表格的表头

layui.use('table', function(){
  var table = layui.table;
  
  //表格列表
  var show_col=[[
            {type:'checkbox', fixed: 'left'}
            ,{field:'id',width:85, sort: 'true',  title: 'ID',style:"font-size:10px;"}
            ,{field:'name',width:180, sort: 'true',  title: '名称',style:"font-size:12px"}
            ,{field:'desc', width:180, sort: 'true' , title: '备注',style:"font-size:12px"}
            ,{field:'is_on_duty' ,width:140,sort: 'true', title: '是否管理',style:"font-size:12px"}
            ,{field:'status', width:94, sort: 'true' , title: '状态',style:"font-size:12px"}
            ,{fixed:'right', width:114, align:'center', toolbar: '#op-bar' , title: '操作',style:"font-size:12px"}
        ]];

  //表格属性
  var options={
    elem: '#projtb'
    ,height: 315
    ,url: ' '     //数据接口
    ,page: true     //开启分页
    ,cols: show_col
  }
 
  //渲染
  table.render(options);
  
});

请求后台接口,对表格数据进行渲染。数据来源都是从服务器上的数据库获取,感觉刚上手thinkphp5框架,对数据库的操作还是蛮顺手的。接口以json形式返回。注意layui表格的接口数据有它自己的默认规则(除非是自己定义返回的数据格式),如果只按照自己后台数据去定义json,会导致页面报错说接口异常,或者表格一片空白。默认接口数据格式以及自定义数据格式的官方文档传送门

/*数据接口*/
    public function getDeptList($keyword = '', $page = 1,$limit=20)
    {
        $map = [];
        if ($keyword) {
            $map['name'] = ['like', "%{$keyword}%"];
        }
        $dept_list_query = $this->dept_model->where($map)->order('id Asc')->paginate($limit, false, ['page' => $page]);
        $dept_list_arr = $dept_list_query->toArray();
        //json数组
        $arr = array();
        $arr['code'] = 0;
        $arr['msg'] = "";
        $arr['count'] = $dept_list_arr['total'];
        $arr['per_page'] = $dept_list_arr['per_page'];
        $arr['current_page'] = $dept_list_arr['current_page'];
        $arr['data'] = $dept_list_arr['data'];
        $arr_json = json($arr);
        return $arr_json;

    }

/* 默认接收的数据格式
    {
      code: 0,
      msg: "",
      count: 1000,
      data: []
    } 
*/

功能的流程大概思路是:选取需要生成word的项目,勾选第一列的复选框,然后点击页面的生成按钮,弹出一个窗口,进行模板选择(因为需求中有三个word模板),选择了模板之后,跳转新的页面,将生成的doc的链接展示出来,供用户点击下载。

流程清楚之后,接下来就是数据问题了,首先要获取到所选取的那些项目的对应id,还有模板选择那个页面的模板id,一起传进后台控制里的生成word的函数。因为在经过了两个前端html页面这些参数才传到后台,所以打算把第一个页面的项目id以数组的形式,利用url传参方式get到第二个模板选择页面,然后在第二个页面利用js中window.location.search获取到第一个页面传过来的项目id,再将项目id和模板id一起传入后台。

那么第一个页面如何获取到项目id呢?利用layui的表格监听,将用户勾选的每一条项目对应的数据存起来。再利用循环,将每条项目的项目id取出来存到一个新的数组,这个数组就是需要传到下一个页面的参数,里面包含了用户勾选到的项目的id,不说那么多,直接上代码。

<!--第一个页面的生成按钮,点击后将打开弹窗(模板选择),并且将项目id传到下弹窗页面-->
<button class="layui-btn layui-btn-mini layui-bg-red" data-type="exportWords">生成文档</button>
    //JS代码
    layui.use(['form', 'layer'], function(){
        var $ = layui.jquery,
                layer = layui.layer,
                table = layui.table;

        //监听表格复选框选择
        table.on('checkbox(filtertb)', function(obj){
            var checkStatus = table.checkStatus('projtb');
            //将用户勾选的项目对应数据存起来
            clicked_project = checkStatus.data;
            //console.log(clicked_project);
        });

        var active = {
            //点击事件绑定
            exportWords:function () {
                //获取勾选的项目id,存入一个新数组,传入生成文档的
ThinkPHP v5.0.24 完整版 更新日志 改进关联的save方法 改进模型数据验证 Collection增加values方法 改进unique验证方法 改进Request类的method方法 ThinkPHP简介 ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,是为了敏捷WEB应用 开发和简化企业级应用开发而诞生的。拥有众多的优秀功能和特性,经历了三年多发展的同时,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和 改进,众多的典型案例确保可以稳定用于商业以及门户级的开发ThinkPHP借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,采用单一入口模式等,融合了Struts的 Action思想和JSP的TagLib(标签库)、RoR的ORM映射和ActiveRecord模式,封装了CURD和一些常用操作,在项目配置、类 库导入、模版引擎、查询语言、自动验证、视图模型、项目编译、缓存机制、SEO支持、分布式数据库、多数据库连接和切换、认证机制和扩展性方面均有独特的 表现。 ThinkPHP主要特性包括 规范:遵循PSR-2、PSR-4规范,Composer及单元测试支持; 严谨:异常严谨的错误检测和安全机制,详细的日志信息,为你的开发保驾护航; 灵活:减少核心依赖,扩展更灵活、方便,支持命令行指令扩展; API友好:出色的性能和REST支持、远程调试,更好的支持API开发; 高效:惰性加载,及路由、配置和自动加载的缓存机制; ORM:重构的数据库、模型及关联,MongoDb支持; ThinkPHP页面展示  相关阅读 同类推荐:站长常用源码
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值