微博项目_发表微博

接下来,我们开始着手对于微博方面的一些处理,在这一节中,我主要完成两个方面的功能实现,一方面是将微博视图呈现出来,另一方面是实现发表微博的功能。

微博视图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<!-- /practice/Home/View/Common/weibo.html -->

<table>
<if condition='!$weibo' >
<tr>
<td>没有发布的微博</td>
</tr>
<else />
<tr>
<th>ID</th>
<th>发布用户</th>
<th>用户头像</th>
<th>微博内容</th>
<th>发布时间</th>
<th>图片</th>
</tr>
<foreach name='weibo' item='v'>
<tr>
<td>{$v.id}</td>
<td>{$v.username}</td>
<td>
<img src="<if condition='$v["face50"]'>__ROOT__/Uploads/{$v.face50}<else />__PUBLIC__/Images/noface.gif</if>">
</td>
<td>{$v.content}</td>
<td>{$v.time}</td>
<td>
<img src="<if condition='$v["mini"]'>__ROOT__/Uploads/{$v.mini}<else />NULL</if>">
</td>
</tr>
</foreach>
</if>
</table>
<div>{$page}</div>

由于我没有专门去布局一个前端页面来承载这些微博数据,所以在这里我只是简单得使用了一个表格来获取这些数据。同时,我在这里调用了TP框架中的一个分页类,实现了将数据分页的效果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/* /practice/Home/Controller/WeiboController.class.php */

<?php
namespace Home\Controller;
use Think\Controller;

class WeiboController extends Controller
{
//微博视图
public function weibo() {
$uid = array(session('uid')); //获取当前用户
$result = M('follow')->field('follow')->where(array('fans' => session('uid')))->select(); //获取当前用户所有关注的好友ID

if ($result) { //将二维结果数组转化为一维数组
foreach ($result as $v) {
$uid[] = $v['follow'];
}
}

//组合WHERE条件,条件为当前用户自身的ID与当前用户所有关注好友的ID
$where = array('uid' => array('IN',$uid));

//分页功能
$count = M('weibo')->where($where)->count();
$page = new \Think\Page($count,10);
$page->setConfig('prev' , '上一页');
$page->setConfig('next' , '下一页');
$limit = $page->firstRow . ',' . $page->listRows;

//读取所有微博
$weibo = D('WeiboView')->where($where)->order('time DESC')->limit($limit)->select();

$this->weibo = $weibo;
$this->page = $page->show();
$this->display();
}
}
?>

在读取微博数据的时候,又调用了WeiboView这个视图,该视图在之前的功能中已经定义过,主要是为了关联各个数据表,用于获取更全面的数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* WeiboViewModel.class.php */

class WeiboViewModel extends ViewModel {
//定义视图表关联关系
Protected $viewFields = array(
'weibo' => array(
'id','content','time','keep','comment','uid',
'_type' => 'LEFT'
),
'userinfo' => array(
'username','face50',
'_on' => 'weibo.uid = userinfo.uid',
'_type' => 'LEFT'
),
'picture' => array(
'mini',
'_on' => 'weibo.id = picture.wid'
)
);
}

发布微博

1
2
3
4
5
6
7
8
9
10
11
<!-- weibo.html -->

<div>
<form action="{:U('sendWeibo')}" enctype="multipart/form-data" method="post">
<textarea name="content"></textarea>
<p>
<input type="file" name="file">
</p>
<input type="submit" value="发布">
</form>
</div>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/* WeiboController.class.php */

//发布微博
public function sendWeibo() {
if(!IS_POST) {
E('页面不存在');
}

$data = array(
'uid' => session('uid'),
'content' => I('post.content'),
'time' => time()
);
$wid = M('weibo')->data($data)->add();

if ($wid) {
$pic = $this->_upload($wid);
$this->success('发布成功');
} else {
$this->error('发布失败,请重试...');
}
}

//上传文件
private function _upload($wid) {
$upload = new \Think\Upload(); //调用TP框架的文件上传类
$upload->maxSize =30000000; //图片最大上传大小
$upload->exts = array('jpg','gif','png','jpeg'); //设置附件上传类型
$upload->rootPath = './Uploads/'; //设置附件上传根目录
$upload->savePath = ''; //设置附件上传子目录

$info = $upload->upload(); //上传文件

if (!$info) {
$this->error($upload->getError()); //上传错误提示错误信息
} else {
foreach ($info as $file) {
$value = $file['savepath'].$file['savename']; //将文件保存地址连接起来
}
}
$img = array(
'mini' => $value,
'wid' => $wid
);
M('picture')->data($img)->add();
}

在实现发表微博这一功能时,考虑到微博当中可能会有上传的图片,所以这里调用了TP框架中的Upload类,用于实现这一功能。

-------------The End-------------