ThinkPHP---TP功能类之公文管理功能
【一】准备工作
(1)创建数据表
表名:sp_doc
create table sp_doc(
id int(11) not null auto_increment,
title varchar(50) not null comment'公文标题',
filepath varchar(255) default null comment'附件存储路径',
filename varchar(255) default null comment'附件原名',
hasfile smallint(1) default '0' comment'是否存在附件',
content text comment'公文内容',
author varchar(40) not null comment'作者',
addtime int(11) default null comment'添加时间',
primary key(id)
)engine=myisam default charset=utf8;
(2)创建控制器(公文document)
控制器:DocController.class.php
方法:showList add
模板:showList.html add.html
控制器DocController.class.php
<?php
namespace Admin\Controller;
use Think\Controller;
class DocController extends Controller{
}
?>
(3)创建二级导航
修改模板文件Index/index.html,修改出公文管理的导航菜单
<li>
<a href="javascript:;" class="documentManage">公文管理</a>
<ul>
<li><a href="{:U('Doc/showList')}" class="documentManage">公文列表</a></li>
<li><a href="{:U('Doc/add')}" class="documentManage">添加公文</a></li>
</ul>
</li>
列表方法还是showList,添加方法还是add,即方法名不变。只修改控制器即可
(4)公文添加功能
控制器:DocController.class.php
方法:add(操作分两部分:模板展示和数据操作)
模板:add.html
①控制中创建add方法
展示模板文件:
public function add(){
$this->display();
}
②将模板文件add.html复制到指定位置,并换掉静态资源路径
③检查表单
注意:
1. 因为表单需要提交附件,所以需要声明提交数据类型不光有字节流,还有二进制流。
enctype="multipart/form-data"
2. 跟文件相关的字段有三个filepath、filename、hasfile三个
3. 文件上传域的type类型file
4. 表单提交,jquery提交。绑定a点击事件
<form action="" method="post" enctype="multipart/form-data">
<fieldset>
<legend>添加公文</legend>
<p><label for="title">标题:</label><input type="text" name="title" id="title"></p>
<p><label for="filename">附件</label><input type="file" name="filename" id="filename"></p>
<p><label for="author">作者</label><input type="text" name="author" id="author"></p>
<p><label for="content">内容:</label><textarea name="content" id="content"></textarea></p>
<div>
<a href="javascript:;" id="submitBtn">提交</a>
<a href="javascript:;" id="resetBtn">清空</a>
</div>
</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>
④先不考虑文件上传,将其他几个字段实现入表保存
public function add(){
if(IS_POST){//处理提交
// 接收除了file外其他字段,因为file无法通过post接收
$post = I('post.');
//补全addtime字段
$post['addtime']=time();
//实例化模型
$model = M('doc');
$result = $model->add($post);
//判断保存结果
if($result){
$this->success('添加成功',U('showList'),3);
}else{
$this-error('添加失败');
}
}else{//展示模板
$this->display();
}
}
添加结果:

不考虑文件上传的前提下,其他字段上传已经完成
【二】实现列表功能
控制器:DocController.class.php
方法:showList
模板:showList.html
(1)编写showList方法,传递数据,展示模板
(2)复制模板文件到指定位置,修改静态资源路径
(3)模板变量展示到模板,分析由于data是select返回结果二维数组,所以需要遍历操作
<table border="1" cellspacing="0" cellpadding="10">
<thead>
<tr><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.title}</td>
<td>附件</td>
<td>{$vol.author}</td>
<td>{$vol.addtime|date='Y-m-d H:i:s',###}</td>
<td><a href="javascript:;">编辑</a></td>
</tr>
</volist>
</table>
查看效果会发现有的标题过长会影响美观,所以需要截取下

解决方法:对多的字符进行截取,然后后面显示省略号
substr方法截取只能截取3的倍数(也就是中文),否则会乱码。。。。。
目前在提供的函数库文件中已经封装好了msubstr函数,该函数可以进行中文截取。这里我将这些方法放到了应用级别的公共文件Common下。具体代码该看文章最后
msubstr函数参数说明:$str需要截取的字符串;$start开始位置;$length截取的长度;$charset字符集;$suffix是否添加省略号(默认添加true)
最后修改模板文件:
{$vol.title|msubstr=###,0,10} //这里我限制显示10个字符
<?php
/**
* @desc thinkphp自定义函数库...
*
*/
// 1. msubstr字符串截取;
// 2. 通过curl发送get请求----这两种请求及支持HTTP协议,也支持https协议
// 3. 通过curl发送post请求---
// 4. 去除空格 /**
*字符串截取函数
*开启mbstring扩展
*/
function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true){
if(mb_strlen($str,$charset)>$length)
{
if(function_exists("mb_substr")){
if($suffix)
return mb_substr($str, $start, $length, $charset)."...";
else
return mb_substr($str, $start, $length, $charset);
}elseif(function_exists('iconv_substr')) {
if($suffix)
return iconv_substr($str,$start,$length,$charset)."...";
else
return iconv_substr($str,$start,$length,$charset);
}
$re['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
$re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
$re['gbk'] = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
$re['big5'] = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
preg_match_all($re[$charset], $str, $match);
$slice = join("",array_slice($match[0], $start, $length));
if($suffix) return $slice."…";
return $slice;
}
else
{
return $str;
}
} /**
* GET 请求
* 需要curl扩展支持
*/
function http_get($url){
$oCurl = curl_init();
if(stripos($url,"https://")!==FALSE){
curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($oCurl, CURLOPT_SSLVERSION, 1);
}
curl_setopt($oCurl, CURLOPT_URL, $url);
curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );
$sContent = curl_exec($oCurl);
$aStatus = curl_getinfo($oCurl);
curl_close($oCurl);
if(intval($aStatus["http_code"])==200){
return $sContent;
}else{
return false;
}
} /**
* POST 请求
* 需要curl扩展支持
*/
function http_post($url,$param,$post_file=false){
$oCurl = curl_init();
if(stripos($url,"https://") !== FALSE){
curl_setopt($oCurl,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($oCurl,CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($oCurl,CURLOPT_SSLVERSION,1);
}
if (is_string($param) || $post_file){
$strPOST = $param;
} else {
$aPOST = array();
foreach($param as $key => $val){
$aPOST[] = $key."=" . urlencode($val);
}
$strPOST = join("&",$aPOST);
}
curl_setopt($oCurl,CURLOPT_URL,$url);
curl_setopt($oCurl,CURLOPT_RETURNTRANSFER,1);
curl_setopt($oCurl,CURLOPT_POST,true);
curl_setopt($oCurl,CURLOPT_POSTFIELDS,$strPOST);
$sContent = curl_exec($oCurl);
$aStatus = curl_getinfo($oCurl);
curl_close($oCurl);
if(intval($aStatus["http_code"]) == 200){
return $sContent;
}else{
return false;
}
} /**
* 空格换行符过滤
*/
function trimAll($parma){
if(is_array($parma)){
return array_map('trimAll',$parma);
}
$before = array(" "," ","\t","\r","\n");
$after = array('','','','','');
return str_replace($before,$after,$parma);
}
ThinkPHP---TP功能类之公文管理功能的更多相关文章
- ThinkPHP---TP功能类之公文管理功能2----------继续完善
[前言] 之前已经完成了公文的添加和列表展示功能,今天继续完善.做下公文的编辑和删除功能. [主体] (1)分析 控制器:DocController.class.php 方法:edit(将模板展示和数 ...
- ThinkPHP---案例--实现知识管理功能
[一]准备工作 (1)数据表sp_knowledge SQL语句:知识管理数据表结构 create table sp_knowledge( id int(11) not null auto_incre ...
- .Net Core MVC 网站开发(Ninesky) 2.2、栏目管理功能-System区域添加
在asp或asp.net中为了方便网站的结构清晰,通常把具有类似功能的页面放到一个文件夹中,用户管理功能都放在Admin文件夹下,用户功能都放在Member文件夹下,在MVC中,通常使用区域(Area ...
- C#开发微信门户及应用(37)--微信公众号标签管理功能
微信公众号,仿照企业号的思路,增加了标签管理的功能,对关注的粉丝可以设置标签管理,实现更加方便的分组管理功能.开发者可以使用用户标签管理的相关接口,实现对公众号的标签进行创建.查询.修改.删除等操作, ...
- yii2-basic后台管理功能开发之三:自定义GridView列显示
在第二篇 yii2-basic后台管理功能开发之二:创建CRUD增删改查 中,我们利用gii工具生成的结果一般并不是我们想要的结果. 我们需要根据自己的需求自定义列显示.我遇到的主要是一下变更: 时间 ...
- [.NET领域驱动设计实战系列]专题七:DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能
一.引言 在当前的电子商务平台中,用户下完订单之后,然后店家会在后台看到客户下的订单,然后店家可以对客户的订单进行发货操作.此时客户会在自己的订单状态看到店家已经发货.从上面的业务逻辑可以看出,当用户 ...
- DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能
DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能 一.引言 在当前的电子商务平台中,用户下完订单之后,然后店家会在后台看到客户下的订单,然后店家可以对客户的订单进行发货操作.此时客户会在自己 ...
- vultr vps发布多用户管理功能
中国用户购买海外vps,有一个麻烦之处是付款环节,可能你没有visa信用卡,vultr和digitalocean和linode这类vps不支持支付宝,给一些朋友带来不便.由此产生的vps代购行业,其实 ...
- 我的第一个python web开发框架(36)——后台菜单管理功能
对于后台管理系统来说,要做好权限管理离不开菜单项和页面按钮控件功能的管理.由于程序没法智能的知道有什么菜单和控件,哪些人拥有哪些操作权限,所以首先要做的是菜单管理功能,将需要管理的菜单项和各个功能项添 ...
随机推荐
- 最大heap
1 什么是最大heap 最大heap是一棵完全二叉树.每棵子树的根比它的两棵子树上的节点都要大. 2 建堆的过程 function max_heaptify(A): for (i = n/2向下取整: ...
- YTU 2632: B2 友元光顾
2632: B2 友元光顾 时间限制: 1 Sec 内存限制: 128 MB 提交: 378 解决: 241 题目描述 定义一个平面上的点类Point,其中设置成员函数distance1求当前对象 ...
- 【POI2007】【Bzoj 1103】大都市meg
http://www.lydsy.com/JudgeOnline/problem.php?id=1103 在线查询某点到根节点的点权和,参考DFS序&欧拉序列,用树状数组维护即可O(nlogn ...
- 两个ajax写在一起报错
这样做完导致的结果是:在谷歌浏览器页面正常显示,在火狐浏览器会不定期出现系统异常错误提示!最后分析原因是: 从异步请求的执行原理来看,我们知道当一个异步请求发送时,浏览器不会处于锁死.等待的状态,从一 ...
- SVN工具使用技巧
SVN打tag SVN打tag是一个很常用的功能,要谈打tag,还得从SVN官方推荐的目录结构说起.SVN官方推荐在一个版本库的根目录下先建立trunk.branches.tags这三个文件夹,其中t ...
- ubuntu 14.04中: 像ubuntu16.04 一样可以在文件夹内打开此路径下的shell
sudo apt-get install nautilus-open-terminal 然后重启 ok!
- jQuery EasyUI,LinkButton(按钮)组件
转自:https://www.cnblogs.com/adc8868/p/6639570.html jQuery EasyUI,LinkButton(按钮)组件 学习要点: 1.加载方式 2.属性列表 ...
- 谈CSS布局中HTML标签语义化
很多人都在做前端,当然这里包括很多新手,也许在新手的想法就是在做布局的时候不要用font标签之类的就算是web标准了,这样一来,造成如今网上“div泛滥”,一看源文件,霍,除了div没其他标签了. 这 ...
- C#实现的鼠标钩子
http://www.oschina.net/code/snippet_104607_45975 使用 Socket 获得网页内容,可以捕获错误页的内容 HttpClient http://www.o ...
- Extjs grid禁用头部点击三角下拉菜单
表格头部的三角在点击的时候禁止出现下拉菜单,给每一列添加属性menuDisabled:true xtype:'grid', enableColumnResize:false, columns:[ {t ...