phpcmsv9全站搜索,不限模型

phpcmsv9全站搜索,不限模型,今天又涨知识了。大家都知道,phpcms搜索时按照模型来搜索的,用了这个方法后,就可以全站搜索

简单修改一下v9默认的搜索功能,可以不按模型搜索全站内容
下面是被修改后的search模块中的index.php文件.

  1. defined(‘IN_PHPCMS’or exit(‘No permission resources.’);
  2. pc_base::load_sys_class(‘form’,,0);
  3. pc_base::load_sys_class(‘format’,,0);
  4. class index {
  5.   function __construct() {
  6.     $this->db = pc_base::load_model(‘search_model’);
  7.     $this->content_db = pc_base::load_model(‘content_model’);
  8.   }
  9.   /**
  10.    * 关键词搜索
  11.    */
  12.   public function init() {
  13.     //获取siteid
  14.     $siteid = isset($_REQUEST[‘siteid’]) && trim($_REQUEST[‘siteid’]) ? intval($_REQUEST[‘siteid’]) : 1;
  15.     $SEO = seo($siteid);
  16.     //搜索配置
  17.     $search_setting = getcache(‘search’);
  18.     $setting = $search_setting[$siteid];
  19.     $search_model = getcache(‘search_model_’.$siteid);
  20.     $type_module = getcache(‘type_module_’.$siteid);
  21.     if(isset($_GET[‘q’])) {
  22.       if(trim($_GET[‘q’])==) {
  23.         header(‘Location: ‘.APP_PATH.‘index.php?m=search’);exit;
  24.       }
  25.       $typeid = emptyempty($_GET[‘typeid’]) ? 0 : intval($_GET[‘typeid’]);
  26.       $time = emptyempty($_GET[‘time’]) || !in_array($_GET[‘time’],array(‘all’,‘day’,‘month’,‘year’,‘week’)) ? ‘all’ : trim($_GET[‘time’]);
  27.       $page = isset($_GET[‘page’]) ? intval($_GET[‘page’]) : 1;
  28.       $pagesize = 10;
  29.       $q = safe_replace(trim($_GET[‘q’]));
  30.       $q = new_html_special_chars(strip_tags($q));
  31.       $q = str_replace(‘%’$q);    //过滤’%’,用户全文搜索
  32.       $search_q = $q;   //搜索原内容
  33.       $sql_time = $sql_tid = ;
  34.       if($typeid$sql_tid = ‘ AND typeid = ‘.$typeid;
  35.       //按时间搜索
  36.       if($time == ‘day’) {
  37.         $search_time = SYS_TIME – 86400;
  38.         $sql_time = ‘ AND adddate > ‘.$search_time;
  39.       } elseif($time == ‘week’) {
  40.         $search_time = SYS_TIME – 604800;
  41.         $sql_time = ‘ AND adddate > ‘.$search_time;
  42.       } elseif($time == ‘month’) {
  43.         $search_time = SYS_TIME – 2592000;
  44.         $sql_time = ‘ AND adddate > ‘.$search_time;
  45.       } elseif($time == ‘year’) {
  46.         $search_time = SYS_TIME – 31536000;
  47.         $sql_time = ‘ AND adddate > ‘.$search_time;
  48.       } else {
  49.         $search_time = 0;
  50.         $sql_time = ;
  51.       }
  52.       if($page==1 && !$setting[‘sphinxenable’]) {
  53.         //精确搜索
  54.         $commend = $this->db->get_one(“`siteid`= ‘$siteid’ $sql_tid $sql_time AND `data` like ‘%$q%'”);
  55.       } else {
  56.         $commend = ;
  57.       }
  58.       //如果开启sphinx
  59.       if($setting[‘sphinxenable’]) {
  60.         $sphinx = pc_base::load_app_class(‘search_interface’, 0);
  61.         $sphinx = new search_interface();
  62.         $offset = $pagesize*($page-1);
  63.         $res = $sphinx->search($qarray($siteid), array($typeid), array($search_time, SYS_TIME), $offset$pagesize‘@weight desc’);
  64.         $totalnums = $res[‘total’];
  65.         //如果结果不为空
  66.         if(!emptyempty($res[‘matches’])) {
  67.           $result = $res[‘matches’];
  68.         }
  69.       } else {
  70.         $sql = “`siteid`= ‘$siteid’ $sql_tid $sql_time AND `data` like ‘%$q%'”;
  71.         $result = $this->db->listinfo($sql‘searchid DESC’$page, 10);
  72.       }
  73.        var_dump($result);
  74.       //如果结果不为空
  75.       if(!emptyempty($result) || !emptyempty($commend[‘id’])) {
  76.         foreach($result as $_v) {
  77.           if($_v[‘typeid’]) $sids[$_v[‘typeid’]][] = $_v[‘id’];
  78.         }
  79.         if(!emptyempty($commend[‘id’])) {
  80.           if($commend[‘typeid’]) $sids[$commend[‘typeid’]][] = $commend[‘id’];
  81.         }
  82.         $model_type_cache = getcache(‘type_model_’.$siteid,‘search’);
  83.         $model_type_cache = array_flip($model_type_cache);
  84.         $data = array();
  85.         foreach($sids as $_k=>$_val) {
  86.           $tid = $_k;
  87.           $ids = array_unique($_val);
  88.           $where = to_sqls($ids‘id’);
  89.           //获取模型id
  90.           $modelid = $model_type_cache[$tid];
  91.           //是否读取其他模块接口
  92.           if($modelid) {
  93.             $this->content_db->set_model($modelid);
  94.             /**
  95.             * 如果表名为空,则为黄页模型
  96.             */
  97.             if(emptyempty($this->content_db->model_tablename)) {
  98.               $this->content_db = pc_base::load_model(‘yp_content_model’);
  99.               $this->content_db->set_model($modelid);
  100.             }
  101.             $datas = $this->content_db->select($where‘*’);
  102.           }
  103.           $data = array_merge($data,$datas);
  104.         }
  105.         $pages = $this->db->pages;
  106.         $totalnums = $this->db->number;
  107.         //如果分词结果为空
  108.         if(!emptyempty($segment_q)) {
  109.           $replace = explode(‘ ‘$segment_q);
  110.           foreach($replace as $replace_arr_v) {
  111.             $replace_arr[] =  ‘<font color=red>’.$replace_arr_v.;
  112.           }
  113.           foreach($data as $_k=>$_v) {
  114.             $data[$_k][‘title’] = str_replace($replace$replace_arr$_v[‘title’]);
  115.             $data[$_k][‘description’] = str_replace($replace$replace_arr$_v[‘description’]);
  116.           }
  117.         } else {
  118.           foreach($data as $_k=>$_v) {
  119.             $data[$_k][‘title’] = str_replace($q‘<font color=red>’.$q.$_v[‘title’]);
  120.             $data[$_k][‘description’] = str_replace($q‘<font color=red>’.$q.$_v[‘description’]);
  121.           }
  122.         }
  123.       }
  124.       $execute_time = execute_time();
  125.       $pages = isset($pages) ? $pages : ;
  126.       $totalnums = isset($totalnums) ? $totalnums : 0;
  127.       $data = isset($data) ? $data : ;
  128.       include   template(‘search’,‘list’);
  129.     } else {
  130.       include   template(‘search’,‘index’);
  131.     }
  132.   }
  133.   public function public_get_suggest_keyword() {
  134.     $url = $_GET[‘url’].‘&q=’.$_GET[‘q’];
  135.     $trust_url = array(‘c8430fcf851e85818b546addf5bc4dd3’);
  136.     $urm_md5 = md5($url);
  137.     if (!in_array($urm_md5$trust_url)) exit;
  138.     $res = @file_get_contents($url);
  139.     if(CHARSET != ‘gbk’) {
  140.       $res = iconv(‘gbk’, CHARSET, $res);
  141.     }
  142.     echo $res;
  143.   }
  144.   /**
  145.    * 提示搜索接口
  146.    * TODO 暂时未启用,用的是google的接口
  147.    */
  148.   public function public_suggest_search() {
  149.     //关键词转换为拼音
  150.     pc_base::load_sys_func(‘iconv’);
  151.     $pinyin = gbk_to_pinyin($q);
  152.     if(is_array($pinyin)) {
  153.       $pinyin = implode($pinyin);
  154.     }
  155.     $this->keyword_db = pc_base::load_model(‘search_keyword_model’);
  156.     $suggest = $this->keyword_db->select(“pinyin like ‘$pinyin%'”‘*’, 10, ‘searchnums DESC’);
  157.     foreach($suggest as $v) {
  158.       echo $v[‘keyword’].“\n”;
  159.     }
  160.   }
  161. }
  162. ?>

然后在header.html模板(不在这里,就在其他的搜索框页面)上面增加一个“不限”的搜索条件,将typeid对应的值为 0,search中的index.html和lists.html也做相同处理,效果就出来了。

文章链接:,本站部分内容来自互联网,如不慎侵害的您的权益,请告知,我们将尽快删除!

发表评论