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)部门删除
ThinkPHP---案例2--部门管理功能的更多相关文章
- [.NET领域驱动设计实战系列]专题七:DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能
一.引言 在当前的电子商务平台中,用户下完订单之后,然后店家会在后台看到客户下的订单,然后店家可以对客户的订单进行发货操作.此时客户会在自己的订单状态看到店家已经发货.从上面的业务逻辑可以看出,当用户 ...
- DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能
DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能 一.引言 在当前的电子商务平台中,用户下完订单之后,然后店家会在后台看到客户下的订单,然后店家可以对客户的订单进行发货操作.此时客户会在自己 ...
- 【php增删改查实例】第十节 - 部门管理模块(新增功能)
正常情况下,在一个部门管理页面,不仅仅需要展示列表数据,还需要基本的增删改操作,所以,我们先把之前写好的新增功能集成进来. 在toolbar中,添加一个新增按钮. <div id="t ...
- 学生与部门管理app-产品功能与界面的简单设计
学生与部门管理app-产品功能与界面的简单设计 1. 结对成员学号 我:********* 大佬:*******10 2. 需求分析(NABCD模型) 2.1 N-需求 各个部门在开学初占据学校青春广 ...
- C#开发微信门户及应用(25)-微信企业号的客户端管理功能
我们知道,微信公众号和企业号都提供了一个官方的Web后台,方便我们对微信账号的配置,以及相关数据的管理功能,对于微信企业号来说,有通讯录中的组织架构管理.标签管理.人员管理.以及消息的发送等功能,其中 ...
- C#开发微信门户及应用(37)--微信公众号标签管理功能
微信公众号,仿照企业号的思路,增加了标签管理的功能,对关注的粉丝可以设置标签管理,实现更加方便的分组管理功能.开发者可以使用用户标签管理的相关接口,实现对公众号的标签进行创建.查询.修改.删除等操作, ...
- C#开发微信门户及应用(17)-微信企业号的通讯录管理开发之部门管理
前面一篇随笔企业号的一些基础信息,以及介绍如何配置企业号的回调方式实现和企业号服务器进行沟通的桥梁.本篇主要还是继续介绍企业号的开发工作的开展,介绍微信企业号通讯录管理开发功能,介绍其中组织机构里面如 ...
- 我的第一个python web开发框架(38)——管理员管理功能
后台管理员的管理功能,它主要用来管理后台的登录账号,绑定权限,当然如果想将后台管理扩展成企业相关管理系统,比如用于公司人事管理,在这个基础上进行适当扩展就可以了. 我们先看看界面效果(也可以看着数据字 ...
- 我的第一个python web开发框架(36)——后台菜单管理功能
对于后台管理系统来说,要做好权限管理离不开菜单项和页面按钮控件功能的管理.由于程序没法智能的知道有什么菜单和控件,哪些人拥有哪些操作权限,所以首先要做的是菜单管理功能,将需要管理的菜单项和各个功能项添 ...
- XMatch: 您的部门管理助手
本博客为XMatch项目宣传博客. XMatch: 您的部门管理助手 目录 一.产品概述 二.产品功能 三.产品的创新特色 四.推广方案 五.宣传图 一.产品概述 当前社团的各方面管理工作主要都由手工 ...
随机推荐
- go11---方法method
package main /* 方法method Go 中虽没有class,但依旧有method 通过显示说明receiver来实现与某个类型的组合 只能为同一个包中的类型定义方法 Receiver ...
- Sqoop异常解决ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: No columns to generate for ClassWriter问题
问题详情如下: 解决办法 这个是由于mysql-connector-java的bug造成的,出错时我用的是mysql-connector-java-5.1.10-bin.jar,更新成mysql-co ...
- sa分析
onCheckedChanged用于监控开启和关闭,其实是Switch,也是Toggle Buttons http://www.google.com/design/spec/components/sw ...
- SQL Server: Difference between PARTITION BY and GROUP BY
https://stackoverflow.com/questions/2404565/sql-server-difference-between-partition-by-and-group-by ...
- go 安装方法
wget https://storage.googleapis.com/golang/go1.5.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1. ...
- 今天要查一下,如果没有密保手机的号码在使用,怎么更换qq的密保手机
本来我是想是使用284来作为foxmail的一个记事本账号,但是需要验证130的手机,这是以前使用的手机,现在不能接受该短信了,得反馈下.
- js获取标签的三种方式
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- (数论)51NOD 1073 约瑟夫环
N个人坐成一个圆环(编号为1 - N),从第1个人开始报数,数到K的人出列,后面的人重新从1开始报数.问最后剩下的人的编号.例如:N = 3,K = 2.2号先出列,然后是1号,最后剩下的是3号.In ...
- 洛谷 P3378 【模板】堆(小根堆)
题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: ...
- 如何保证access_token长期有效--微信公众平台开发
http://blog.csdn.net/qq_33556185/article/details/52758781 import javax.servlet.ServletContext; impor ...