PHPcms v9分栏目搜索功能记录

来源:互联网 发布:水泥胶砂强度试验数据 编辑:程序博客网 时间:2024/05/29 07:16

之前做过一个搜索功能,是直接调用PHPcms v9本身的全文搜索,通过自定义typeid来定义自己所要搜索的栏目,无意间在网上发现一个自定义catid来搜索的,感觉十分不错。


一、 修改phpcms/model/content_model.class.php

//112行附近$this->search_api($id,$inputinfo); 修改为:$this->search_api($id,$systeminfo['catid'],$inputinfo);
//public function search_api这个函数进行修改    public function search_api($id = 0,$catid, $data = array(), $action = 'update'){        $type_arr = getcache('search_model_'.$this->siteid,'search');        $typeid = $type_arr[$this->modelid]['typeid'];        if($action == 'update'){            $fulltext_array = getcache('model_field_'.$this->modelid,'model');            foreach($fulltext_array AS $key=>$value){                if($value['isfulltext']) {                    $fulltextcontent .= $data['system'][$key] ? $data['system'][$key] : $data['model'][$key];                }            }            $this->search_db->update_search($typeid ,$id, $fulltextcontent,addslashes($data['system']['title']).' '.addslashes($data['system']['keywords']),$data['system']['inputtime'],'',$catid);          }elseif($action == 'delete') {              $this->search_db->delete_search($typeid ,$id);          }     }

二、修改phpcms/model/search_model.class.php

//找到update_search方法public function update_search($typeid,$id = 0 ,$data = '',$text = '',$adddate = 0,$iscreateindex=0,$catid){        $segment = pc_base::load_sys_class('segment');        //分词结果        $fulltext_data = $segment->get_keyword($segment->split_result($data));        $fulltext_data = $text.' '.$fulltext_data;        if(!$iscreateindex){            $r = $this->get_one(array('typeid'=>$typeid,'id'=>$id),'searchid');        }        if($r){            $searchid = $r['searchid'];            $this->update(array('data'=>$fulltext_data,'adddate'=>$adddate,'catid'=>$catid),array('typeid'=>$typeid,'id'=>$id));        }else{            $siteid = param::get_cookie('siteid');            $searchid = $this->insert(array('typeid'=>$typeid,'id'=>$id,'adddate'=>$adddate,'data'=>$fulltext_data,'siteid'=>$siteid,'catid'=>$catid),true);        }        return $searchid;    }

三、修改全站更新缓存phpcms/modules/content/classes/search_api.class.php

//31行左右$system_keys = 'id,inputtime,'.implode(',',$system_keys);//修改为$system_keys = 'id,inputtime,catid,'.implode(',',$system_keys);
//62行左右$temp['adddate'] = $r['inputtime'];//下面增加$temp['catid'] = $r['catid'];

四、修改phpcms/modules/search/search_admin.php

//86$this->db->update_search($typeid ,$id, $r['fulltextcontent'],$r['title'],$r['adddate'], 1,$r['catid']); //这里增加了$r['catid']

五、修改phpcms/modules/search/index.php

//找到25行左右if(isset($_GET['q']))在下面添加$catid =$_GET['catid']?" AND catid = '$_GET[catid]'":'';
//找到60行左右$commend = $this->db->get_one("`typeid` = '$typeid' $sql_time AND `data` like '%$q%'");//修改为$commend = $this->db->get_one("`typeid` = '$typeid' $sql_time $catid AND `data` like '%$q%'");
//找到83行左右if(!empty($segment_q)) {    $sql = "`siteid`= '$siteid' AND `typeid` = '$typeid' $sql_time AND MATCH (`data`) AGAINST ('$segment_q' IN BOOLEAN MODE)";    } else {    $sql = "`siteid`= '$siteid' AND `typeid` = '$typeid' $sql_time AND `data` like '%$q%'";}//修改为:$sql = "`siteid`= '$siteid' AND `typeid` = '$typeid' $catid $sql_time AND `data` like '%$q%'";//这样修改可以防止分词搜索不到结果的情况

六、修改数据库_search增加字段catid int(4)并且做个索引,已经有栏目的数据可以用数据库查询代码导入,没有数据的,后台提交会自动生成索引

注意:要安装phpcms的全站搜索,并且对需要搜索的栏目添加搜索分类

前台调用代码:

{php $cat_id = 6;}<!--此处是一级栏目id,可以自己设置--><form name="search" id="" action="" method="get">        <li>关 键 词 :<input name="q" value="请输入查询关键词" type="text"  onclick="javascript:document.getElementById('q').value='';" id="q" style="width:150px;"/></li>        <li>产品类别:<select name="catid" style=" width:150px;">          <option value="{$cat_id}">所有产品分类</option>         {loop subcat($cat_id) $v}             {php if($v['type']!=0) continue;}                  <option value="{$v[catid]}">{$v[catname]}</option>            {/loop}                </select></li>        <input type="hidden" value="search" name="m">        <input type="hidden" value="index" name="c">        <input type="hidden" value="init" name="a">        <input id="typeid" type="hidden" value="1" name="typeid">        <input id="siteid" type="hidden" value="1" name="siteid">        <li><input type="submit" name="submit" id="submit" value=""></li>        </form>

OK,大功告成!

2 0
原创粉丝点击