ThinkPHP---案例2--部门管理功能

【一】部门列表展示

分析:

①控制器DeptController.class.php

②方法showList(不要使用list方法,因为list是关键词)

③模板文件:showList.html

下面按步骤编写

      ①创建方法showList来展示模板

class DeptController extends Controller{
        public function showList(){
            $this->display();
        }
}

      ②将模板文件showList.html复制到View/Dept下(因为控制器为Dept,方法为showList,所以要一一对应)

      ③修改静态资源路径

      ④修该showList方法,获取部门数据。并传递到模板

public function showList(){
            $model = M('dept');//模型实例化
            $data = $model->order('sort asc')->select();//条件查询,升序排列
            $this->assign('data',$data);//变量分配传递到模板
            $this->display();
        }

     ⑤模板遍历读取数据

<table border="1" cellspacing="0">
    <tr>
        <td>id</td><td>部门</td><td>所属部门</td><td>排序</td><td>备注</td><td>编辑数据</td><td>删除数据</td>
    </tr>
    <volist name='data' id='vol'>
        <tr>
            <td class="num">{$vol.id}</td>
            <td class="name">{$vol.name}</td>
            <td class="procress">
                <if condition="$vol.pid == 0">
                    顶级部门
                <else/>
                    二级部门
                </if>
            </td>
            <td class="node">{$vol.sort}</td>
            <td class="time">{$vol.remark}</td>
            <td><a href="javascript:;">编辑</a></td>
            <td><a href="javascript:;">删除</a></td>
        </tr>
    </volist>
</table>

注意:1. 模板的if判断,必须加空格

<if condition="$vol.pid == 0">顶级部门</if>

           2.<else />加/

 

【二】部门编辑

分析:

控制器:DeptController.class.php

方法:edit(展示模板】处理提交)

模板:edit.html

下面按步骤编写代码

(1)编写edit方法,实现模板展示

public function edit(){
            //展示模板
            $this->display();
        }

(2)修改编辑按钮,跳页时带上id

<td><a href="__CONTROLLER__/edit/id/{$vol.id}">编辑</a></td>

(3)复制模板文件edit.html到指定位置,Admin/View/Dept/edit.html;修改静态资源路径

(4)修改edit方法,展示原来数据

id:<input type="text" name="id" readonly="readonly" value="{$data.id}"><br/>
部门:<input type="text" name="name" value="{$data.name}"><br/>
所属部门:
<select>
    <option value="0">顶级部门</option>
    <volist name="info" id="vol">
        <option value="{$vol.id}">{$vol.name}</option>
    </volist>
</select><br/>
排序:<input type="text" name="sort" value="{$data.sort}"><br/>
备注:<input type="text" name="id" value="{$data.remark}"><br/>

(5)处理表单提交页面

隐藏域:因为系统限制不能执行批量修改,所以修改时必须指定主键。所以必须添加一个隐藏域,来传递id

<form action="" method="post">
    id:<input type="hidden" name="id" value="{$data.id}"><br/>
    <!-- 或者$Think.get.id -->
    部门:<input type="text" name="name" value="{$data.name}"><br/>
    所属部门:
    <select name="pid">
        <option value="0">顶级部门</option>
        <volist name="info" id="vol">
            <option value="{$vol.id}">{$vol.name}</option>
        </volist>
    </select><br/>
    排序:<input type="text" name="sort" value="{$data.sort}"><br/>
    备注:<input type="text" name="remark" value="{$data.remark}"><br/>
    <button>提交</button>
</form>

jquery提交:

<script type="text/javascript">
    $(document).ready(function(){
        $('button').on('click',function(){
            $('form').submit();//提交表单
        })
    })
</script>

(6)数据的保存,修改edit方法后的代码

public function edit(){//展示模板或者post请求
            if (IS_POST){
                $post = I('post.');
                // dump($post);die;
                $model = M('dept');
                //保存操作
                $result = $model->save($post);
                if ($result !== false) {
                    $this->success('修改成功',U('showList'),3);
                }else{
                    $this->error('修改失败');
                }
            }else{
                //接收id
                $id=I('get.id');
                //实例化模型
                $model = M('dept');
                //查询指定记录
                $data = $model->find($id);
                // 查询全部的部门信息(不包含当前级),同于下拉。因为包含自己所在级别会在递归时陷入死循环?
                $info = $model->where('id != '.$id)->select();
                //变量分配
                $this->assign('data',$data);
                $this->assign('info',$info);
                //展示模板
                $this->display();
            }
        }

 

【三】部门删除

分析

控制器:DeptController.class.php

方法:del

模板:删除不需要模板文件,因为删除就是个处理数据过程。和登出一样

说明:有单个删除,也有批量删除。而编辑只能单个编辑,不能批量编辑。

(1)修改模板,添加复选框

<table border="1" cellspacing="0">
    <tr>
        </td>><td>id</td><td>部门</td>
        <td>所属部门</td><td>排序</td><td>备注</td><td>编辑数据</td><td><a href="javascript:;" class="del">删除</a</td>
    </tr>
    <volist name='data' id='vol'>
        <tr>
            <td class="num">{$vol.id}</td>
            <td class="name">{$vol.name}</td>
            <td class="procress">
                <if condition="$vol.pid == 0">
                    顶级部门
                <else/>
                    二级部门
                </if>
            </td>
            <td class="node">{$vol.sort}</td>
            <td class="time">{$vol.remark}</td>
            <td><a href="__CONTROLLER__/edit/id/{$vol.id}">编辑</a></td>
            <td><input type="checkbox" class="deptid" value="{$vol.id}"></td>
        </tr>
    </volist>
</table>

(2)点击删除按钮,实现删除

       ①点击删除,获取复选框的值(jquery实现)。之后到php删除方法

<script type="text/javascript">
    $(document).ready(function(){
        $('.del').on('click',function(){
            var id = '';
            $.each($('input:checkbox:checked'),function(){
                id += $(this).val()+',';
            });
            // 去掉最后的,通过截取字符串获取
            id = id.substring(0,id.length-1);
            //带着参数跳转到del方法
            window.location.href = '__CONTROLLER__/del/id/'+id;//删除方法和展示方法的控制器是同级,所以用模板常量__CONTROLLER__
        })
    })
</script>

      ②编写del方法,实现删除

        //真删除---批量和单个删除
        public function del(){
            //接收参数
            $id  = I('get.id');
            //模型实例化
            $model = M('dept');
            //删除
            $result = $model->delete($id);
            //判断结果,删除成功或失败都会跳转到列表页,所以不用加入跳转链接
            if ($result) {
                $this->success('删除成功');
            }else{
                $this->error('删除失败');
            }
        }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(2)部门编辑

(3)部门删除

posted @ 2018-03-31 17:38  剑仙6  阅读(219)  评论(0编辑  收藏  举报
欢迎访问个人网站www.qingchun.在线