为了方便查找内容,不免要在网站添加搜索功能,要注意的是搜索虽然方便可是也增加了对数据库查询的压力。
所以啊,搜索是双刃剑,用的时候还是要注意场合,做一下优化之类的。
我用的是thinkphp,在博客也加个搜索功能,但是我只想搜索标题中含有的,别浪费太多资源搜索全文了
下面开始举例子:
这是thinkphp里面一个function:
//搜索功能
public function search(){
$blog = D('blogs'); //这是实例化我的数据表
$search_words = I('post.search_words'); //这是获取搜索关键词
$data = array();//定义一个空数组
$data['title'] = array("like","%".$search_words."%"); //查询数据库里面标题中含有关键词的数据
$result = $blog -> where($data) ->select();//选择上一步查询到的结果
$this -> assign('lists',$result);//传送到前端模板文件
$this -> display();//这里是调用模板
}
这里用了like关键词。
这样就可以在模板中做一个循环显示结果了:
<?php foreach( $lists as $blog ):?>
<div class="panel panel-info">
<div class="panel-heading">
<a href="<?php echo U('/Home/Index/read');?>?id=<?php echo $blog['id'];?>">
<?php echo $blog['title'];?>
</a>
</div>
<div class="panel-body">
<?php echo mb_substr(strip_tags( html_entity_decode($blog['content'])),0,80,'utf-8');?>
</div>
<div class="panel-footer info">
<span class="author pull-left">作者:<?php echo $blog['author'];?></span>
<span class="time pull-right"><?php echo date('Y-m-d H:s:m',$blog['intime']);?></span>
</div>
</div>
<?php endforeach;?>
还可以自己修改一下排序等,优化一下搜索。
注意:用get获取关键词对分页可以直接进行,用post方式要进行其他设置,下面我是以get方式的案例,这样可以给搜索结果分分页。
//搜索功能
public function search(){
$blog = D('blogs');
$setting = D('settings');
$configs = $setting -> showAll();
$search_words = I('get.search_words');//获取搜索关键词
$data = array();
$data['title'] = array("like","%".$search_words."%"); //进行搜索查询
$count = $blog->where($data) -> count();//统计查询结果总数
$Pages = new \Think\Page($count,$configs['index_count']);//实例化分页类
$lists = $blog -> order('id desc')->limit(0,10) ->select();//最近文章用
$result = $blog ->where($data)-> order('id desc')->limit($Pages->firstRow.','.$Pages->listRows)->select();
$page = $Pages -> show();
$this -> assign('list',$lists);
$this -> assign('blogs',$result);
$this -> assign('page',$page );
$this -> assign('config',$this -> config);
$this -> display();
}