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 Admin\Controller;
use Think\Controller;
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 \Think\Page($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>
ThinkPHP---案例2--职员管理功能的更多相关文章
- [.NET领域驱动设计实战系列]专题七:DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能
一.引言 在当前的电子商务平台中,用户下完订单之后,然后店家会在后台看到客户下的订单,然后店家可以对客户的订单进行发货操作.此时客户会在自己的订单状态看到店家已经发货.从上面的业务逻辑可以看出,当用户 ...
- DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能
DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能 一.引言 在当前的电子商务平台中,用户下完订单之后,然后店家会在后台看到客户下的订单,然后店家可以对客户的订单进行发货操作.此时客户会在自己 ...
- .Net Core MVC 网站开发(Ninesky) 2.2、栏目管理功能-System区域添加
在asp或asp.net中为了方便网站的结构清晰,通常把具有类似功能的页面放到一个文件夹中,用户管理功能都放在Admin文件夹下,用户功能都放在Member文件夹下,在MVC中,通常使用区域(Area ...
- 解析大型.NET ERP系统 通用附件管理功能
大型系统具备一个通用的附件管理功能,对于单据中无法清晰表达的字段,用一个附件图片或附件文档表示是最好的方法了.比如物料清单附加一张CAD图纸,销售订单评审功能中附加客户的各种表格,通用附件功能对系统起 ...
- C#开发微信门户及应用(25)-微信企业号的客户端管理功能
我们知道,微信公众号和企业号都提供了一个官方的Web后台,方便我们对微信账号的配置,以及相关数据的管理功能,对于微信企业号来说,有通讯录中的组织架构管理.标签管理.人员管理.以及消息的发送等功能,其中 ...
- C#开发微信门户及应用(37)--微信公众号标签管理功能
微信公众号,仿照企业号的思路,增加了标签管理的功能,对关注的粉丝可以设置标签管理,实现更加方便的分组管理功能.开发者可以使用用户标签管理的相关接口,实现对公众号的标签进行创建.查询.修改.删除等操作, ...
- AgileEAS.NET SOA 中间件Web运行容器管理功能已全部开源,欢迎大家下载、使用、反馈
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- yii2-basic后台管理功能开发之三:自定义GridView列显示
在第二篇 yii2-basic后台管理功能开发之二:创建CRUD增删改查 中,我们利用gii工具生成的结果一般并不是我们想要的结果. 我们需要根据自己的需求自定义列显示.我遇到的主要是一下变更: 时间 ...
- 看svn用户组管理功能的产品设计
我负责公司的svn配置.用了近一年了,今天饶有兴致,分享一下svn的用户组管理功能,这个产品设计值得借鉴,简单易用. svn用户组管理的功能描述:新建用户组,并给组分配成员用户:编辑用户组,包括修改组 ...
随机推荐
- Struts2 整合jQuery实现Ajax功能(1)
技术领域非常多东西流行,自然有流行的道理.这几天用了jQuery,深感有些人真是聪明绝顶,能将那么多技术融合的如此完美. 首先明白个概念: jQuery是什么:是使用javascript语言开发的,用 ...
- 几种查看CentOS系统版本号和位数的方法
查看系统版本号: cat /etc/redhat-release cat /proc/version uname -a cat /etc/issue 查看64位还是32位: getconf LONG_ ...
- iOS开发——常见BUG——导航控制器中的子控制器设置StatusBar状态失效的问题
iOS9之前控制StatusBar的两种方式: 第一种方式:全局控制StatusBar 1. 在项目的Info.plist文件里设置UIViewControllerBasedStatusBarAppe ...
- 每个sql结果返回值的字节大小的峰值统计
#5KB/per结合数据库配置mylimit = 50
- 获取浏览器弹窗alert、自定义弹窗以及其操作
web自动化测试第10步:获取浏览器弹窗alert.自定义弹窗以及其操作 - CSDN博客 http://blog.csdn.net/ccggaag/article/details/76573857 ...
- LightTable的结构(一)
LightTable使用clojurescript来生成js,然后使用 node-webkit 来处理UI clojurescript非常适合做抽象程度很高的页面和编辑逻辑结构设计, 最近会对整体进行 ...
- POJ1751 Tree 树分治
分析:每次找重心可以发现最多n层,每层复杂度是O(nlogn) 总体时间复杂度是O(nlog^2n) #include <cstdio> #include <cstring> ...
- list集合去重复元素
//set集合去重,不打乱顺序 public static void main(String[] args){ List<String> list = new ArrayList<S ...
- [JSOI 2008] 星球大战
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1015 [算法] 考虑离线 , 将删点转化为加点 , 用并查集维护连通性即可 时间复杂 ...
- nginx开发(四)调用ffmpeg,搭建rtmp直播流。
1: 修改conf文件,配置rtmp直播 打开usr/local/nginx/conf/nginx.conf,添加红色内容: rtmp {#rtmp点播配置 server { li ...