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)——后台菜单管理功能
对于后台管理系统来说,要做好权限管理离不开菜单项和页面按钮控件功能的管理.由于程序没法智能的知道有什么菜单和控件,哪些人拥有哪些操作权限,所以首先要做的是菜单管理功能,将需要管理的菜单项和各个功能项添 ...
随机推荐
- react 引入 百度地图API
使用 Echarts 的地图的时候,发现报错,说 Bmap api is not loaded 百度地图API没有加载 乍一想,Echarts 用的也是 百度地图 啊,没有引入百度地图,还用个啥,当然 ...
- VS-按F12无法跳转到函数定义,点击右键也无法跳转
工具->选项->项目和解决方案->常规,把“在解决方案资源管理器中跟踪活动项”反选.
- BZOJ_1862_[Zjoi2006]GameZ游戏排名系统&&BZOJ_1056_[HAOI2008]排名系统_Splay
BZOJ_1862_[Zjoi2006]GameZ游戏排名系统&&BZOJ_1056_[HAOI2008]排名系统_Splay Description 排名系统通常要应付三种请求:上传 ...
- Linux下Redis的安装和部署 详细
一.Redis介绍 Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多 ...
- Spark 二项逻辑回归__二分类
package Spark_MLlib import org.apache.spark.ml.Pipeline import org.apache.spark.ml.classification.{B ...
- 0621补-MVC的基础整理
包括:Model-模型.view-视图.Controller-控制器. 特点: 将功能强制分成两个部分,显示html文件,和逻辑PHP文件: 要求浏览器请求负责功能的PHP逻辑文件,该PHP逻辑文件, ...
- vue中子组件向父组件传值
1.子组件$emit()触发,父组件$on()监听 子组件:<template> <div class="hello"> <button v-on:c ...
- bzoj 4809: 皇后【dfs】
爆搜卡线过 并不知道正解是啥 #include<iostream> #include<cstdio> using namespace std; const int N=40; ...
- PWA技术深入学习
PWA技术 PWA全称Progressive Web App,即渐进式WEB应用. 解决的问题 实现离线缓存功能,即使用户手机没有网络,依然可以使用一些离线功能 可以添加至主屏幕,点击主屏幕图标可以实 ...
- redis实际项目作用
我整理一下redis主要在项目作用,只是我接触到的 1 手机验证码存入redis中,可以限制什么时候有效 2 防止接口请求频率过高,例如一分钟只能请求5次 代码如下: <?php /** * ...