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: 您的部门管理助手 目录 一.产品概述 二.产品功能 三.产品的创新特色 四.推广方案 五.宣传图 一.产品概述 当前社团的各方面管理工作主要都由手工 ...
随机推荐
- HDU 1047 Integer Inquiry 大数相加 string解法
本题就是大数相加,题目都不用看了. 只是注意的就是HDU的肯爹输出,好几次presentation error了. 还有个特殊情况,就是会有空数据的输入case. #include <stdio ...
- Android Studio 使用 SVN 必然遇到问题:commit ** File out of data 问题解决方法
转载请注明:http://blog.csdn.net/lrs123123/article/details/44829579 Android Studio 的使用已经越来越成为趋势.而结合版本号控制工具 ...
- c# Http下载
1.首先是服务器上发布资源,如果资源时自定义格式,比如 .zidingyi结尾的后缀文件,需要在MIME类型上添加处理方式 需要注意的是.net里面要设置 System.Net.ServicePoin ...
- go09---defer
package main /* defer 类似其它语言中的析构函数,在函数体执行结束后 按照调用顺序的相反顺序逐个执行,先进后出, 即使函数发生严重错误也会执行,资源清理文件关闭, 支持匿名函数的调 ...
- 关于Time Series Database
今天观察了下clojure之父datomic.com的数据库 有点类似sequence数据库的变种 不过这类数据库,感觉用在移动端会更有市场: 1. 移动端需要这种可以本地存储,无删除,联网只增加,只 ...
- OTN / SONET / SDH
①OTN(光传送网,OpticalTransportNetwork),是以波分复用技术为基础.在光层组织网络的传送网,是下一代的骨干传送网; ②SONET (Synchronous Optical N ...
- 在ARM-linux上实现4G模块PPP拨号上网【转】
本文转载自:http://blog.csdn.net/zqixiao_09/article/details/52540887 在ARM平台上实现4G模块的PPP拨号上网,参考网上的资料和自己的理解,从 ...
- sublime —— 强大的插件
1. 代码 自动补全与智能提示: All Autocomplete:Sublime Text 默认的 Autocomplete 功能只考虑当前的文件,而 All Autocomplete 插件会搜索所 ...
- (转载)基于React与Vue后,移动开源项目Weex如何定义未来
https://www.ctolib.com/topics-106347.html vuejs+ts+webpack2框架的项目实践 https://mp.weixin.qq.com/s/p2Uc9I ...
- E20171225-hm
abstract adj. 抽象的,理论上的; 难解的; 抽象派的; 茫然的;