微博项目_搜索功能

搜索也是在项目中比较常用的一项功能,在这一节中,主要对该功能进行实现。

搜索找人

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
<!-- /practice/Home/View/Search/sech.html -->

<div>
<fieldset>
<legend>搜索找人</legend>
<form action="{:U('sechUser')}" method="get" >
<input type="text" name="keyword"
value='<if condition="$keyword">{$keyword}<else />搜索找人</if>' />
<input type="submit" value="搜&nbsp;索" />
</form>
</fieldset>
<table>
<if condition='isset($user) && !$user' >
<tr>
<td>没有检索到相关用户</td>
</tr>
<else />
<tr>
<th>ID</th>
<th>用户名</th>
<th>性别</th>
<th>星座</th>
<th>简介</th>
<th>头像</th>
</tr>
<foreach name='user' item='v'>
<tr>
<td>{$v.id}</td>
<td>{$v.username}</td>
<td>{$v.sex}</td>
<td>{$v.constellation}</td>
<td>{$v.intro}</td>
<td>
<img src="<if condition='$v["face50"]'>__ROOT__/Uploads/{$v.face50}<else />__PUBLIC__/Images/noface.gif</if>">
</td>
</tr>
</foreach>
</if>
</table>
</div>

在这个页面中,利用<if>标签设定了input框中value属性的默认值,另外,对于获取到的用户信息,利用表格的方式通过<foreach>标签循环输出。

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
/* /practice/Home/Controller/SearchController.class.php */

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

class SearchController extends Controller {
//搜索找人
public function sechUser() {
$keyword = $this->_getKeyword();

if ($keyword) {
//检索出除自己外含有关键字的昵称
$where = array(
'username' => array('LIKE','%' . $keyword . '%'),
'uid' => array('NEQ',session('uid'))
);
$field = array('id','username','sex','constellation','intro','face50');
$user = M('userinfo')->where($where)->field($field)->select();
}

$this->user = $user ? $user : false; //变量输出
$this->keyword = $keyword;
$this->display('sech'); //指定视图地址
}

//返回搜索关键字
private function _getKeyword() {
return $_GET['keyword'] == '搜素微博、找人' ? NULL : I('get.keyword');
}
}

搜索找微博

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
<!-- sech.html -->

<div>
<fieldset>
<legend>搜索找微博</legend>
<form action="{:U('sechWeibo')}" method="get" >
<input type="text" name="keyword" />
<input type="submit" value="搜&nbsp;索" />
</form>
</fieldset>
<table>
<if condition='isset($weibo) && !$weibo' >
没有找到与&nbsp;<span style="font-weight: bold;color: #f00">{$keyword}</span>&nbsp;相关的微博
<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>{$v.mini}</td>
</tr>
</foreach>
</if>
</table>
</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
/* /practice/Home/Model/WeiboViewModel.class.php */

<?php
namespace Home\Model;
use Think\Model\ViewModel;

class WeiboViewModel extends ViewModel {
//定义视图表关联关系
Protected $viewFields = array(
'weibo' => array(
'id','content','time',
'_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
12
13
14
15
/* SearchController.class.php */

public function sechWeibo() {
$keyword = $this->_getKeyword();

if ($keyword) {
//检索出含有关键字的微博
$where = array('content' => array('LIKE','%' . $keyword . '%'));
$weibo = D('WeiboView')->where($where)->order('time DESC')->select();
}

$this->weibo = $weibo ? $weibo : false;
$this->keyword = $keyword;
$this->display('sech');
}
-------------The End-------------