phpcms不限模型搜索的设置方法

来源:undefined 2024-12-28 09:30:56 1002

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(&#39;IN_PHPCMS&#39;) or exit(&#39;No permission resources.&#39;);

pc_base::load_sys_class(&#39;form&#39;,&#39;&#39;,0);

pc_base::load_sys_class(&#39;format&#39;,&#39;&#39;,0);

class index {

function __construct() {

$this->db = pc_base::load_model(search_model);

$this-&gt;content_db = pc_base::load_model(content_model);

}

/**

* 关键词搜索

*/

public function init() {

//获取siteid

$siteid = isset($_REQUEST[siteid]) &amp;&amp; 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 &gt; .$search_time;

} elseif($time == week) {

$search_time = SYS_TIME - 604800;

$sql_time =  AND adddate &gt; .$search_time;

} elseif($time == month) {

$search_time = SYS_TIME - 2592000;

$sql_time =  AND adddate &gt; .$search_time;

} elseif($time == year) {

$search_time = SYS_TIME - 31536000;

$sql_time =  AND adddate &gt; .$search_time;

} else {

$search_time = 0;

$sql_time = ;

}

if($page==1 &amp;&amp; !$setting[sphinxenable]) {

//精确搜索

$commend = $this-&gt;db-&gt;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-&gt;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-&gt;db-&gt;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=&gt;$_val) {

$tid = $_k;

$ids = array_unique($_val);

$where = to_sqls($ids, , id);

//获取模型id

$modelid = $model_type_cache[$tid];

//是否读取其他模块接口

if($modelid) {

$this-&gt;content_db-&gt;set_model($modelid);

/**

* 如果表名为空,则为黄页模型

*/

if(empty($this-&gt;content_db-&gt;model_tablename)) {

$this-&gt;content_db = pc_base::load_model(yp_content_model);

$this-&gt;content_db-&gt;set_model($modelid);

}

$datas = $this-&gt;content_db-&gt;select($where, *);

}

$data = array_merge($data,$datas);

}

$pages = $this-&gt;db-&gt;pages;

$totalnums = $this-&gt;db-&gt;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=&gt;$_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=&gt;$_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].&amp;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-&gt;keyword_db = pc_base::load_model(search_keyword_model);

$suggest = $this-&gt;keyword_db-&gt;select("pinyin like $pinyin%", *, 10, searchnums DESC);

foreach($suggest as $v) {

echo $v[keyword]."

";

}

}

}

?&gt;

登录后复制

然后在header.html模板(不在这里,就在其他的搜索框页面)上面增加一个“不限”的搜索条件,将typeid对应的值为0,search中的index.html和lists.html也做相同处理,效果就出来那,这样只要不选择模型那么搜索出来的结果就是所有模型中符合条件的数据。

PHP中文网,大量的免费PHPCMS教程,欢迎在线学习!

以上就是phpcms不限模型搜索的设置方法的详细内容,更多请关注php中文网其它相关文章!

最新文章