前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHPCMSV9按栏目搜索

PHPCMSV9按栏目搜索

作者头像
李维亮
发布2021-07-09 15:28:01
7790
发布2021-07-09 15:28:01
举报
文章被收录于专栏:李维亮的博客李维亮的博客

1、修改后台添加、修改内容时添加栏目id到搜索表中 找到 phpcmsmodelcontent_model.class.php 大概106、287行左右,一共两处

代码语言:javascript
复制
$this->search_api($id,$inputinfo);

修改为:

代码语言:javascript
复制
$this->search_api($id,$systeminfo['catid'],$inputinfo);

找到 大概381行,将private function search_api 方法替换为以下代码

代码语言:javascript
复制
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、修改搜索模板文件 找到 phpcmsmodelsearch_model.calss.php 的 21行左右 将 update_search 方法替换为:

代码语言:javascript
复制
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、修改后台更新全站缓存位置 找到phpcmsmodelscontentclassessearch_api.class.php 的第 31行 将

代码语言:javascript
复制
$system_keys = 'id,inputtime'.implode(',',$system_keys);

修改为

代码语言:javascript
复制
$system_keys = 'id,inputtime,catid,'.implode(',',$system_keys);

找到

代码语言:javascript
复制
$temp['adddate'] = $r['inputtime'];

在后面加上

代码语言:javascript
复制
$temp['catid'] = $r['catid'];

找到phpcmsmodelssearchsearch_admin.php大概第85行,将foreach修改为下面

代码语言:javascript
复制
foreach ($datas as $id=>$r) {
$this->db->update_search($typeid ,$id, $r['fulltextcontent'],$r['title'],$r['adddate'], 1,$r['catid']);
}

4、修改前台搜索程序 找到 phpcmsmodelssearchindex.php 第25行 在 if(isset($_GET['q'])) { 下加上

代码语言:javascript
复制
$catid =$_GET['catid']?" AND catid = '$_GET[catid]'":'';

然后在第57行左右,将

代码语言:javascript
复制
$commend = $this->db->get_one("`typeid` = '$typeid' $sql_time AND `data` like '%$q%'");

修改为

代码语言:javascript
复制
$commend = $this->db->get_one("`typeid` = '$typeid' $sql_time $catid AND `data` like '%$q%'");

再找到第84行左右将

代码语言:javascript
复制
//如果分词结果为空
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%'";
}

修改为

代码语言:javascript
复制
//如果分词结果为空
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%'";
}

最后,进入数据库,找到表v9_search,添加字段catid,int,4 到网站后台全站索引一下,在搜索表单中添加以下代码就可以用了

代码语言:javascript
复制
<input type="hidden" name="catid" value="{$catid}"/>

缺点:如果该栏目下有子栏目,那么子栏目的文章是搜索不到的,只有在指定栏目ID下的直接文章才能被搜索到。 代码来自 http://bbs.phpcms.cn/thread-532805-1-1.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档