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)——后台菜单管理功能
对于后台管理系统来说,要做好权限管理离不开菜单项和页面按钮控件功能的管理.由于程序没法智能的知道有什么菜单和控件,哪些人拥有哪些操作权限,所以首先要做的是菜单管理功能,将需要管理的菜单项和各个功能项添 ...
随机推荐
- 通俗理解LDA主题模型
通俗理解LDA主题模型 0 前言 印象中,最開始听说"LDA"这个名词,是缘于rickjin在2013年3月写的一个LDA科普系列,叫LDA数学八卦,我当时一直想看来着,记得还打印 ...
- Cocos2D-X2.2.3学习笔记12(瞬时动作)
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVjYmxvZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- [转] CVonline: Image Databases
转自:CVonline by Robert Fisher 图像数据库 Index by Topic Action Databases Biological/Medical Face Databases ...
- Scala界面事件处理
演示样例代码: import scala.swing.SimpleSwingApplication import scala.swing.MainFrame import scala.swing.Bu ...
- JavaScript基础 -- BOM
JavaScript三大核心: 1)核心(ECMAScript):描述了JS的语法和基本对象 2)文档对象模型(DOM):处理网页内容的方法和接口 3)浏览器对象模型(BOM):与浏览器交互的方法和接 ...
- js执行“按回车”的动作
<textarea class="W_input" style="overflow: hidden; height: 23px;" node-type=& ...
- YTU 2541: 汽水瓶
2541: 汽水瓶 时间限制: 1 Sec 内存限制: 128 MB 提交: 40 解决: 27 题目描述 有这样一道智力题:"某商店规定:三个空汽水瓶可以换一瓶汽水.小张手上有十个空汽 ...
- selenium对51job进行职位爬虫
selenium 爬虫流程如下: 1.对某职位进行爬虫 ---如:自动化测试 2.用到IDE为 pycharm 3.爬虫职位导入到MongoDB数据库中 4.在线安装 pip install pymo ...
- extjs grid禁止表格头部使用鼠标拖拽改变宽度
extjs6 经典版 表格头部使用鼠标拖动 禁止改变列的宽度 只需要给grid 设置属性enableColumnResize:false就可以啦 xtype:'grid', enableColumnR ...
- Oracle 助记
title: Oracle 助记 Nothing is impossible! 基础操作 $ sqlplus name/pssword; # 登录数据库 $ create user username ...