phpcmsv9全站搜索,不限模型!
phpcms不限模型搜索的设置方法
phpcmsv9全站搜索,不限模型,今天又涨知识了。大家都知道,phpcms搜索时按照模型来搜索的,用了这个方法后,就可以全站搜索
简单修改一下v9默认的搜索功能,可以不按模型搜索全站内容
下面是被修改后的search模块中的index.php文件
立即学习“PHP免费学习笔记(深入)”;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
<?php defined('IN_PHPCMS') or exit('No permission resources.');
pc_base::load_sys_class('form','',0);
pc_base::load_sys_class('format','',0);
class index {
function __construct() {
$this->db = pc_base::load_model(search_model);
$this->content_db = pc_base::load_model(content_model);
}
/**
* 关键词搜索
*/
public function init() {
//获取siteid
$siteid = isset($_REQUEST[siteid]) && trim($_REQUEST[siteid]) ? intval($_REQUEST[siteid]) : 1;
$SEO = seo($siteid);
//搜索配置
$search_setting = getcache(search);
$setting = $search_setting[$siteid];
$search_model = getcache(search_model_.$siteid);
$type_module = getcache(type_module_.$siteid);
if(isset($_GET@[q])) {
if(trim($_GET@[q])==) {
header(Location: .APP_PATH.index.php?m=search);exit;
}
$typeid = empty($_GET@[typeid]) ? 0 : intval($_GET@[typeid]);
$time = empty($_GET@[time]) || !in_array($_GET@[time],array(all,day,month,year,week)) ? all : trim($_GET@[time]);
$page = isset($_GET@[page]) ? intval($_GET@[page]) : 1;
$pagesize = 10;
$q = safe_replace(trim($_GET@[q]));
$q = new_html_special_chars(strip_tags($q));
$q = str_replace(%, , $q);//过滤%,用户全文搜索
$search_q = $q;//搜索原内容
$sql_time = $sql_tid = ;
if($typeid) $sql_tid = AND typeid = .$typeid;
//按时间搜索
if($time == day) {
$search_time = SYS_TIME - 86400;
$sql_time = AND adddate > .$search_time;
} elseif($time == week) {
$search_time = SYS_TIME - 604800;
$sql_time = AND adddate > .$search_time;
} elseif($time == month) {
$search_time = SYS_TIME - 2592000;
$sql_time = AND adddate > .$search_time;
} elseif($time == year) {
$search_time = SYS_TIME - 31536000;
$sql_time = AND adddate > .$search_time;
} else {
$search_time = 0;
$sql_time = ;
}
if($page==1 && !$setting[sphinxenable]) {
//精确搜索
$commend = $this->db->get_one("`siteid`= $siteid $sql_tid $sql_time AND `data` like %$q%");
} else {
$commend = ;
}
//如果开启sphinx
if($setting[sphinxenable]) {
$sphinx = pc_base::load_app_class(search_interface, , 0);
$sphinx = new search_interface();
$offset = $pagesize*($page-1);
$res = $sphinx->search($q, array($siteid), array($typeid), array($search_time, SYS_TIME), $offset, $pagesize, @weight desc);
$totalnums = $res[total];
//如果结果不为空
if(!empty($res[matches])) {
$result = $res[matches];
}
} else {
$sql = "`siteid`= $siteid $sql_tid $sql_time AND `data` like %$q%";
$result = $this->db->listinfo($sql, searchid DESC, $page, 10);
}
var_dump($result);
//如果结果不为空
if(!empty($result) || !empty($commend[id])) {
foreach($result as $_v) {
if($_v[typeid]) $sids[$_v[typeid]][] = $_v[id];
}
if(!empty($commend[id])) {
if($commend[typeid]) $sids[$commend[typeid]][] = $commend[id];
}
$model_type_cache = getcache(type_model_.$siteid,search);
$model_type_cache = array_flip($model_type_cache);
$data = array();
foreach($sids as $_k=>$_val) {
$tid = $_k;
$ids = array_unique($_val);
$where = to_sqls($ids, , id);
//获取模型id
$modelid = $model_type_cache[$tid];
//是否读取其他模块接口
if($modelid) {
$this->content_db->set_model($modelid);
/**
* 如果表名为空,则为黄页模型
*/
if(empty($this->content_db->model_tablename)) {
$this->content_db = pc_base::load_model(yp_content_model);
$this->content_db->set_model($modelid);
}
$datas = $this->content_db->select($where, *);
}
$data = array_merge($data,$datas);
}
$pages = $this->db->pages;
$totalnums = $this->db->number;
//如果分词结果为空
if(!empty($segment_q)) {
$replace = explode(, $segment_q);
foreach($replace as $replace_arr_v) {
$replace_arr[] = <font>.$replace_arr_v.</font>;
}
foreach($data as $_k=>$_v) {
$data[$_k][title] = str_replace($replace, $replace_arr, $_v[title]);
$data[$_k][description] = str_replace($replace, $replace_arr, $_v[description]);
}
} else {
foreach($data as $_k=>$_v) {
$data[$_k][title] = str_replace($q, <font>.$q.</font>, $_v[title]);
$data[$_k][description] = str_replace($q, <font>.$q.</font>, $_v[description]);
}
}
}
$execute_time = execute_time();
$pages = isset($pages) ? $pages : ;
$totalnums = isset($totalnums) ? $totalnums : 0;
$data = isset($data) ? $data : ;
includetemplate(search,list);
} else {
includetemplate(search,index);
}
}
public function public_get_suggest_keyword() {
$url = $_GET@[url].&q=.$_GET@[q];
$trust_url = array(c8430fcf851e85818b546addf5bc4dd3);
$urm_md5 = md5($url);
if (!in_array($urm_md5, $trust_url)) exit;
$res = @file_get_contents($url);
if(CHARSET != gbk) {
$res = iconv(gbk, CHARSET, $res);
}
echo $res;
}
/**
* 提示搜索接口
* TODO 暂时未启用,用的是google的接口
*/
public function public_suggest_search() {
//关键词转换为拼音
pc_base::load_sys_func(iconv);
$pinyin = gbk_to_pinyin($q);
if(is_array($pinyin)) {
$pinyin = implode(, $pinyin);
}
$this->keyword_db = pc_base::load_model(search_keyword_model);
$suggest = $this->keyword_db->select("pinyin like $pinyin%", *, 10, searchnums DESC);
foreach($suggest as $v) {
echo $v[keyword]."
";
}
}
}
?>
然后在header.html模板(不在这里,就在其他的搜索框页面)上面增加一个“不限”的搜索条件,将typeid对应的值为0,search中的index.html和lists.html也做相同处理,效果就出来那,这样只要不选择模型那么搜索出来的结果就是所有模型中符合条件的数据。
PHP中文网,大量的免费PHPCMS教程,欢迎在线学习!
以上就是phpcms不限模型搜索的设置方法的详细内容,更多请关注php中文网其它相关文章!