博客文章已转移到新地址,本地址暂时保留,新文章仅在新地址更新。[置顶]

thinkphp站内搜索功能

作者:小宝 2017-05-02 16:05:08

为了方便查找内容,不免要在网站添加搜索功能,要注意的是搜索虽然方便可是也增加了对数据库查询的压力。

所以啊,搜索是双刃剑,用的时候还是要注意场合,做一下优化之类的。

我用的是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();
    }


©BRISKLAN;备案信息:桂ICP备16004757号-1