第低第一次开发PHP项目,负责的事网站内部系统通知显示、回复、删除等功能的站内信小模块,基本上成功实现了想得到的功能,也是第一次写分享,感觉看别人写的东西的时候总感觉没有一定的基础没办法深入的理解,这次打算好好啰嗦一下,把感受和积累都说出来。
第啊首先介绍了开发的整体思路,接着是取数据并显示在页面上的方法实现,然后是AJAX动态删除和重定向删除两个方法的实现,再是消息回复方法和动态添加条目的实现。最后附上了CSS与修改过的PAGE类,基本上复制下来就能用了。
第低开发的开始是先看了2天的thinkPHP3.1的技术文档,然后也算是入门了,以前学的JAVA,虽然语法不熟,但是意思都能猜出来,也就开始了第一次实战,所以我觉得我下面要讲的可能很low,还有好多错误,但是菜鸟看肯定感同身受。
第低先是建数据库innerMail表
第低id是自动生成的主键;userid是与此消息相关的用户(站内信只有用户和后台两个交流对象);time是操作时间,只显示到分;type是此条消息的类型,1是系统通知,2是用户回复;status是消息的状态,已读=1,未读=0,自己发送的回复=2;replyid指如果是回复,就写入回复的那条消息的id,系统消息默认是0。好了,弄得有点点复杂,不过用起来逻辑满清晰的,框架用的是TP3.1,把自己的数据库配置到config文件里面去,就可以了,没有太复杂的业务逻辑,Model不用专门建立。
第低接下来我是去做的View模版:message.html,最终效果是这样的
第低好吧,右下角被挡住了,这不是问题,功能上基本都有,优化嘛,不是这次要考虑的东西。虽然刚开始做的时候,完全是想到啥就做啥,最后就知道还是要先把功能效果设计好了再编码才是合理的,一个人的敏捷开发简直逗。功能主要是,显示系统通知,未读的样式比较明显,已读的偏灰,回复类型有自己的样式。每条消息都可以回复和删除,即有redirect重定向也有AJAX异步显示。下面有thinkPHP分页工具类的调用,对源代码做了简单的修改,样式操作起来更舒服一些。
第低先是取数据显示,用的是TP的volist标签实现的,因为是分成了系统通知和回复两种消息类型,后台分两次取出两组数据传过来,所以做的是两个volist的嵌套循环,同时也把各个DIV层和<li>标签也遍历显示了,最后输出分页工具的<div>,每页设定是显示六条系统通知,回复类型的消息都不计入。下面是控制器UserAction里面的message()方法的代码:
<pre name="code" class="php">function message()
{
//分页查询
$Dao = M("Innermail");//tp大法好
$uid = $this->getUserId();//早就定义好的方法,取当前登录用户的id
$condition1['userid'] = $uid;
$condition1['type'] = 1; //不计算回复类型的消息数
$count = $Dao->where($condition1)->count();//连续操作查询有多少钱系统通知
import("ORG.Util.Page");//导入TP框架extend包里面的page工具类,我的源代码这里出现了三个,只有一个里面没有报错的是能用的,要分清楚
$p = new Page($count, 6);//每页显示六条通知的分页类实例化
<span> </span><span style="white-space:pre"> </span>//这里定义了分页工具类的显示格式,当然我把工具类也修改了一下,首页尾页上一下一页都是一直显示,各个标签都给了自己的id或者class
<span style="font-family: Arial, Helvetica, sans-serif;">$p->setConfig('header.css', "<br><span class='pagehead'>共 %totalPage% 页 / %totalRow% 条消息</span>");</span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre"> </span>//源代码里面用的是header.css,和百度的header有点不一样</span><pre name="code" class="php"> $p->setConfig('first', '首页');
$p->setConfig('last', '尾页');
$p->setConfig('theme', "%first% %upPage% %linkPage% %downPage% %end% %header.css% ");//这里可以设置你自己想要的各个按钮的顺序,看一下源代码的各个属性就好
//提交分页tool
$page = $p->show();
// 当前用户的接受到的消息查询,时间逆序,最新的在前面
$list1 = $Dao->order('time DESC')->limit($p->firstRow . ',' . $p->listRows)->where($condition1)->select();
//回复类型消息查询,时间顺序,最新的在后面
$condition2['userid'] = $uid;
$condition2['type'] = 2;
$list2 = $Dao->order('time ASC')->where($condition2)->select();
// 模版赋值
$this->assign('page', $page);
$this->assign('list1', $list1);
$this->assign('list2', $list2);
//更改当前消息列表所有的未阅读消息的阅读状态为已读=1/未读=0/自己发送的回复=2
$data['status'] = 1;
$Dao->where('status=0')->save($data);
//输出
$this->display();
}
啊