分享

phpcms v9 添加按栏目搜索 catid

 周旋图书馆 2016-04-27
V9 按栏目搜索

修改了全部栏目搜索不到数据的bug

1、修改后台添加、修改内容时添加栏目id到搜索表中
        找到  phpcms\model\content_model.class.php 大概106、287行左右,一共两处
        $this->search_api($id,$inputinfo);
        修改为:
        $this->search_api($id,$systeminfo['catid'],$inputinfo);
        找到 大概381行,将private function search_api 方法替换为以下代码
        
        private 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);
                }
        }

2、修改搜索模板文件
        找到 phpcms\model\search_model.calss.php 的 21行左右
        将 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;
        }

        
3、修改后台更新全站缓存位置
        找到phpcms\models\content\classes\search_api.class.php 的第 31行
        将        $system_keys = 'id,inputtime'.implode(',',$system_keys);
        修改为
        $system_keys = 'id,inputtime,catid,'.implode(',',$system_keys);
        
        找到 $temp['adddate'] = $r['inputtime'];在后面加上
        $temp['catid'] = $r['catid'];
        
        
        找到phpcms\models\search\search_admin.php大概第85行,将foreach修改为下面
        foreach ($datas as $id=>$r) {
                $this->db->update_search($typeid ,$id, $r['fulltextcontent'],$r['title'],$r['adddate'], 1,$r['catid']);
        }
4、修改前台搜索程序
        找到 phpcms\models\search\index.php 第25行
        在 if(isset($_GET['q'])) { 下加上
        $catid =$_GET['catid']?" AND catid = '$_GET[catid]'":'';
        然后在第57行左右,将
        $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%'");
        再找到第84行左右将
        //如果分词结果为空
        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%'";
        }
        修改为
        //如果分词结果为空
        if(!empty($segment_q)) {
                $sql = "`siteid`= '$siteid' AND `typeid` = '$typeid' $catid $sql_time AND MATCH (`data`) AGAINST ('$segment_q' IN BOOLEAN MODE)";
        } else {
                $sql = "`siteid`= '$siteid' AND `typeid` = '$typeid' $catid $sql_time AND `data` like '%$q%'";
        }
        
5、最后一步,到数据库中,找到数据表  表前缀_search,在此表中加一字段  catid  int 4 做个索引,

OK,去按栏目id搜索试试吧,可以了,调试可用。


6、因为有的朋友不知道怎么调用,所以简单写了个调用的表单

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

转自:http://bbs./thread-532805-1-1.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约