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 做个索引,去按栏目id搜索试试吧,可以了,调试可用。
具体的1.在旧版百度搜索主页输入百度搜索时页面自动跳转至百度预测结果怎么办这样的关键字,需要用户按回车键或者点击百度一下才会进行匹配检索并跳转至检索页面2.在新版百度搜索主页输入关键词的第一个字基本就自动进行跳转了,并且所跳转的页面和谷歌搜索很类似,习惯了旧版百度搜索的用户很不习惯
如何关闭新版百度搜索的自动预测功能呢?首先进入百度新版搜索主页,随意输入关键词,让百度搜索进行自动跳转,跳转至预测搜索页面
鼠标移动至设置-下拉菜单-关闭预测,这样就可以关闭新版百度搜索的搜索预测,再次前往百度搜索主页输入关键词,就不会自动进行跳转
如果想再次开启搜索预测这个功能,在新版百度搜索主页随意输入关键词,然后按回车键进行搜索,鼠标移动至设置-下拉菜单-开启预测你看过后很简单吧以后不会可以向我一样经常到后盾人平台找找相关教材看看就会了,希望能帮到你,给个采纳吧谢谢(⊙㉨⊙)
1、当你输入有机的时候,分析一下你的search的链接参数
http://www.ifooday.com/index.php?m=search&c=index&a=init&typeid=&siteid=1&q=%D3%D0%BB%FA
这里差不多没个变量都有参数,只有typeid=是空的,也就是说你直接在咨询那里点搜索,没有指定搜索的类别范围,服务器没有接收到你要搜索的请求,搜索的语句没有处理typeid为空的时候的语句。
2、当你点击左边的分类项的时候,你的url的连接参数
http://www.ifooday.com/index.php?m=search&c=index&a=init&typeid=81&q=%D3%D0%BB%FA&siteid=1&time=all
这回你看,你的typeid就变成了81,也就是说服务器接收了typeid,所以才会搜索的出结果。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)