写在前面:好久没有更新博客,这段时间主要在写这个东西了,其实东西也不难,两三天就写好了。也收获了一些东西,这里做一下分享和总结。
需求:是学校新闻中心组织的一个活动,感恩母亲节微言活动,将收集到的祝福通过网站(wap端)展示出来,然后通过微信公共帐号,广播给同学们。
成果见:成电母亲节活动 ,用手机打开,效果好点~
功能有:
(1)通过下拉刷新查看状态(微信昵称+文字+图片);
(2)后台上传状态的界面,这里主要考虑到和谐的因素,没有像微博那样发布状态,而是我们来审核和发布;
(3)根据微信昵称搜索对应的状态;
(4)分享到新浪微博;
(5)用户点赞。
感觉东西主要在前端,现在我都还没怎么仔细看前端的代码,是凝聚工作室的同学写的,有时间看看,这里主要根据以上功能介绍下后台的实现逻辑。
(1)下拉刷新,查看状态:
自己稍微看了下ajax的请求,也看了点jquery的东东,,自己写不来,不过大概了解了原理,后台代码写起来不难。前端根据url接口请求数据,会带上页码信息,后端收到页码信息,就会去数据库取对应的数据,然后以json格式返回给前端即可。这里添加了一个剩余页码的字段,来通知前端数据没有了,不用用户再去加载一次,为用户着想。 其实,这里还没有完全设计好,不能通知有多少新消息,这个感觉需要记录住用户的加载时间,如果有新数据,就去通知用户,然后用户刷新获取新数据。
从上面也可以看出后端的数据库设计,哪些字段。这里特别指出的是,返回时间这个东西,应前端的需求(显示大小/用户体验这些),需要设计成“昨天、今天”这种时间的格式,所以需要对时间做一下判断,然后返回,从网上找了一个函数,参见:
//转换时间的显示格式
public function timeLine($t)
{
$t = strtotime($t);
$now = time();
$diff = $now - $t; // 计算出当前时间和给予时间的差,单位秒
if ($diff < 60) {
return $diff.' 秒前'; // 小于60秒
} elseif ($diff < 3600) {
return floor($diff / 60).' 分钟前'; //小于一小时
} elseif (date('Ymd', $now) == date('Ymd', $t)) {
return '今天 '.date('H:i', $t); // 今天
} elseif (strtotime(date('Ymd', $now)) - strtotime(date('Ymd', $t)) == 86400) {
return '昨天 '.date('H:i', $t); //昨天
} elseif (date('Y', $now)-date('Y', $t) <= 0) {
return date('m月d日', $t); // 一年内
} else {
return date('Y-m-d', $t); // 一年之外
}
}
(2)后台上传页面。
上传的数据包括:微信昵称、文字、图片,这里主要是图片上传这个东西,花费的时间多一点。图片上传直接用CI的文件上传类轻松解决,配置一下图片的参数就可以了。然后这里使用的是sae,使用的是storage服务,也就相当于电脑的硬盘。需要注意的是sae上部署的代码和本地的代码配置不一样,最明显的是数据库的配置,这个小项目用到的一些CI 的辅助类的系统文件也不一样,所以本地和新浪上需要两套代码(当然也有新浪的本地部署策略,我没有研究这个)。 我的方法是建两个工程,一个本地测试,一个用于新浪的svn上传。本地测试通过之后,将对应的代码添加到另外一个工程就好。
接着说图片的处理。我们打开新浪微博可以看到,默认打开的是小图(thumbnail),点击可以查看打图(bmiddle),还有查看原图的功能。这是为什么呢?当时自己还在纠结这个问题,前端可以控制图片的显示大小,直接传原图给前端就可以了,干嘛这么麻烦。原因是:节省流量、提高加载速度。。。很简单的道理。所以我们这里也类似做了这个图像的处理,同样使用的是CI 的图像处理类。跟上面一样,部署到sae可能会出错误,不用担心,一般使用sae版本的CI 版本可以解决问题~ 处理成功之后,同样保存在storage中,然后在数据库中存储路径,在前端请求数据的时候,返回这些数据就可以了。
(3)根据微信昵称搜索状态:
这个简单,根据数据库中的微信昵称字段,进行搜索就可以了;
(4)分享到新浪微博:
申请新浪微博的开放接口就可以了。http://open.weibo.com/sharebutton 。注意网站和应用的区别,以及上传东西的问题,我上传了好几次才审核通过,有次是网站内容不够丰富,上传点东西上去就好了。。。
(5)用户点赞:
点赞请求发过来,数据库中的字段+1就可以了,然后返回当前的赞的数量。这里没有做点赞的限制,也就是可以无限点赞。。。想着需要一张表记录赞的人数,而我们又没有用户这些~ 当然限制IP也是一个思路。
最后,当然是源码了:源码下载链接
github链接(后面会上传):
写在后面:
现在在看python的django框架,准备用这个写个实验室的网站玩玩,,,java的搞不起啊,感觉有点复杂。。。