【一】准备工作

(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);
}

最新文章

  1. MCMC: The Metropolis Sampler
  2. get_list_or_404(klass, *args, **kwargs)和get_object_or_404(klass, *args, **kwargs)区别
  3. Webwork 学习之路【02】前端OGNL试练
  4. 20145212 实验五《Java网络编程》
  5. leetcode371. Sum of Two Integers
  6. Yii2.0 执行流程分析
  7. Fiddler中session的请求/响应类型与图标对照表
  8. lua绑定c++的时候常见得错误
  9. THREE.js代码备份——线框cube、按键、鼠标控制
  10. ANDROID_MARS学习笔记_S01_011ProgressBar
  11. bzoj1293: [SCOI2009]生日礼物
  12. 通过LDF文件实现日志回滚将数据恢复(转)
  13. 【HDOJ】3397 Sequence operation
  14. 【转】iOS实时卡顿监控
  15. Docker contanier comunication with route
  16. iOS开发的另类神器:libimobiledevice开源包【类似android adb 方便获取iOS设备信息】
  17. MYSQL实战-------丁奇(极客时间)学习笔记
  18. Linux命令-cut篇
  19. 【DWM1000】 code 解密1一 去掉Main 函数多余内容
  20. MAVEN 创建项目

热门文章

  1. Python爬虫(一):基本概念
  2. curl HTTP_USER_AGENT
  3. cc1: error: bad value (armv5) for -march= switch【转】
  4. sql server 生成随机数 rand函数
  5. 微软2016校园招聘在线笔试 [Recruitment]
  6. E20170528-ts
  7. Vigen&#232;re密码 2012年NOIP全国联赛提高组(字符串模拟)
  8. P3402 【模板】可持久化并查集
  9. 运行Tomcat 遇到的问题以及解决总结
  10. Notepad++安装插件