zoukankan      html  css  js  c++  java
  • ThinkPHP---案例2--职员管理功能

    【一】准备工作

    (1)创建菜单,修改跳转路径

             <li>
                <a href="javascript:;" class="workerManage">职员管理</a>
                <ul>
                    <li><a href="{:U('User/showList')}" class="workerManage">职员列表</a></li>
                    <li><a href="{:U('User/add')}" class="workerManage">添加职员</a></li>
                </ul>
            </li>

    (2)创建控制器UserController.class.php

    <?php
        namespace AdminController;
        use ThinkController;
        class UserController extends Controller{
        }
    ?>

    【二】职员添加

    分析:控制器UserController.class.php

    方法:add

    模板:add.html

    (1)add方法,展示添加职员的模板

    public function add(){
                $this->display();
            }

    (2)复制模板文件add.html到指定位置Admin/View/User/add.html,修改静态资源路径

    (3)改写add方法,查询部门信息,展示到模板的下拉列表

    public function add(){
                //查询部门信息
                $data = M('dept')->field('id,name')->select();
                $this->assign('data',$data);
                $this->display();
            }
    所属部门:
            <select name="dept_id">
                <foreach name="data" item="fo">
                    <option value="{$fo.id}">{$fo.name}</option>
                </foreach>
            </select>

    (4)检查模板表单

    提交单当前页面可以不写,或者当前控制器下的add方法

    <form action="" method="post">
        <fieldset>
            <legend>添加职员</legend>
            <p><label for="username">用户名:</label><input type="text" name="username" id="username"></p>
            <p><label for="password">密码:</label><input type="text" name="password" id="password"></p>
            <p><label for="nickname">姓名:</label><input type="text" name="nickname" id="nickname"></p>
            <p><label for="truename">全称:</label><input type="text" name="truename" id="truename"></p>
            <p>所属部门:
                <select name="dept_id">
                    <foreach name="data" item="fo">
                        <option value="{$fo.id}">{$fo.name}</option>
                    </foreach>
                </select>
            </p>
            <p>
                性别:
                <label for="man">男</label><input type="radio" name="sex" value="1" id="man">
                <label for="woman">女</label><input type="radio" name="sex" value="2" id="woman">
            </p>    
            <p><label for="birthday">生日:</label><input type="date" name="birthday" id="birthday"></p>
            <p><label for="tel">联系电话:</label><input type="text" name="tel" id="tel"></p>
            <p><label for="email">邮箱:</label><input type="text" name="email" id="email"></p>
            <p><label for="remark">备注:</label><textarea name="remark" id="remark"></textarea></p>
            <p>
                <a href="javascript:;" id="submitBtn">提交</a>
                <a href="javascript:;" id="resetBtn">清空</a>
            </p>
        </fieldset>
    </form>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){
            $('#submitBtn').on('click',function(){
                $('form').submit();
            });
            $('#resetBtn').on('click',function(){
                $('form').get(0).reset();
            });
        });
    </script>

    注意:

            ①清空方法记得将jquery对象转化为js的dom对象,否则无法用js的reset重置操作

            ②时间控件用的H5的type="date"

    (5)改写add方法,编写处理表单代码,实现数据的接收和入库

    public function add(){
                if(IS_POST){//数据提交
                    // 数据对象创建方法接收数据
                    $model = M('user');
                    //创建数据对象(因为还有一个发布时间,在模板里没有,所以要在这里添加)
                    $data = $model->create();
                    //添加时间字段
                    $data['addtime'] = time();
                    //写入数据表
                    $result = $model->add($data);
                    if ($result) {
                        $this->success('添加成功',U('showList'),3);
                    }else{
                        $this->error('添加失败');
                    }
                }else{//模板展示
                    //查询部门信息
                    $data = M('dept')->field('id,name')->select();//select返回二维数组,find返回一维数组
                    $this->assign('data',$data);
                    $this->display();
                }
            }

    【三】职员列表的展示

    控制器:UserController.class.php

    方法:showlist

    模板:showList.html

    (1)创建showList方法,展示数据和模板

    public function showList(){
                    //展示数据
                    $data = M('user')->select();
                    $this->assign('data',$data);
                    //展示模板
                    $this->display();
                }

    (2)将模板文件showList.html复制到指定位置Admin/View/User/showList.html,修改静态资源路径

    (3)将data数据展示到模板

    注意:因为data是select查询返回的结果,所以是二维数组。在模板里需要遍历

    <table border="1" cellspacing="0" cellpadding="10">
        <thead>
            <tr><td>序号</td><td>姓名</td><td>昵称</td><td>所属部门</td><td>性别</td><td>生日</td><td>电话</td><td>邮箱</td>
            <td>添加时间</td><td>编辑</td></tr>
        </thead>
        <foreach>
            <volist name="data" id="vol">
                <tr>
                    <td>{$vol.id}</td>
                    <td>{$vol.username}</td>
                    <td>{$vol.nickname}</td>
                    <td>{$vol.dept_id}</td>
                    <td>{$vol.sex}</td>
                    <td>{$vol.birthday}</td>
                    <td>{$vol.tel}</td>
                    <td>{$vol.email}</td>
                    <td>{$vol.addtime|date='Y-m-d H:i:s',###}</td>
                    <td><a href="javascript:;">编辑</a></td>
                </tr>
            </volist>
        </foreach>
    </table>

    【四】使用数据分页类实现分页

    分析,因为是在数据展示基础上分页,所以控制器、方法、模板与展示功能出的一致

    一共七步:这里粘贴出完整代码

    public function showList(){
                    //实例化模型
                    $model = M('user');
                    //1. 查询总记录数.如果后期做逻辑删除时可以加上状态条件筛选-----$model->where('status=1')->count();
                    $count=$model->count();
                    //2. 实例化分页类 传入总记录数和每页显示的记录数(2)
                    $Page= new ThinkPage($count,2);
                    //3. 可选步骤,定制分页按钮的提示文字
                    $Page-> rollPage = 3;
                    $Page-> lastSuffix=false;
                    $Page->setConfig('prev','上一页');
                    $Page->setConfig('next','下一页');
                    $Page->setConfig('last','末页');
                    $Page->setConfig('first','首页');
                    //4. 通过show方法,输出分页url连接,分页显示输出
                    $show = $Page->show();
                    //5. 使用limit方法查询数据
                    $data = $model->limit($Page->firstRow.','.$Page->listRows)->select();
                      //6. 传递模板(数据集、分页输出)
                    $this->assign('data',$data);
                    $this->assign('show',$show);
                    $this->assign('count',$count);
                    //7. 展示模板
                    $this->display();
                }

    输出show方法的结果:假如这里一共分5页,当前页current为1,下一页next为2

    string(382) "<div>  
                    <span class="current">1</span>
                    <a class="num" href="/index.php/Admin/User/showList/p/2.html">2</a>
                    <a class="num" href="/index.php/Admin/User/showList/p/3.html">3</a>
                    <a class="num" href="/index.php/Admin/User/showList/p/4.html">4</a>
                    <a class="num" href="/index.php/Admin/User/showList/p/5.html">5</a> 
                    <a class="next" href="/index.php/Admin/User/showList/p/2.html">>></a> 
                </div>"

    注意:首页和尾页设置:代码不起作用,一般是大小写没写对(踩过的坑~~~)

            ①如果总页码数小于$rollPage(显示的页码数),则没有首页和末页的按钮,这时需要修改$rollPage的值(因为$rollPage是public权限,可以继承重写);

    $Page-> rollPage = 3;

            ②分页类里有$lastSuffix显示尾页的页数,导致无法显示尾页的汉字,所以可以在控制器里覆盖重写

    public $lastSuffix = true; // 最后一页是否显示总页数

           修改:

    $Page-> lastSuffix=false;

     模板代码:

    <table border="1" cellspacing="0" cellpadding="10">
        <thead>
            <tr><td>序号</td><td>姓名</td><td>昵称</td><td>所属部门</td><td>性别</td><td>生日</td><td>电话</td><td>邮箱</td>
            <td>添加时间</td><td>编辑</td></tr>
        </thead>
        <volist name="data" id="vol">
            <tr>
                <td>{$vol.id}</td>
                <td>{$vol.username}</td>
                <td>{$vol.nickname}</td>
                <td>{$vol.dept_id}</td>
                <td>{$vol.sex}</td>
                <td>{$vol.birthday}</td>
                <td>{$vol.tel}</td>
                <td>{$vol.email}</td>
                <td>{$vol.addtime|date='Y-m-d H:i:s',###}</td>
                <td><a href="javascript:;">编辑</a></td>
            </tr>
        </volist>
    </table>
    {$show}
    <div>每页显示2条记录,总共{$count}条记录</div>

           

            

  • 相关阅读:
    Zboot权限后台管理系统开源啦
    java中的强引用,软引用,弱引用,虚引用
    基于Hexo搭建个人博客
    拾遗Timer定时器
    手把手教你使用jmeter接口测试
    Vue 常见的面试题
    vue脚手架环境搭建
    vue过滤器
    基础面试题总结1
    Promise 库 lie.js 源码解读
  • 原文地址:https://www.cnblogs.com/fightjianxian/p/8685945.html
Copyright © 2011-2022 走看看