PHPcmsv9全站搜索,不限模型,今天又涨知识了。大家都知道,PHPcms搜索时按照模型来搜索的,用了这个方法后,就可以全站搜索
简单修改一下v9默认的搜索功能,可以不按模型搜索全站内容
下面是被修改后的search模块中的index.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() {
- @H_502_73@$this->db = pc_base::load_model('search_model');
- @H_502_73@$this->content_db = pc_base::load_model('content_model');
- }
- /**
- * 关键词搜索
- */
- public function init() {
- //获取siteid
- @H_502_73@$siteid = isset(@H_502_73@$_REQUEST['siteid']) && trim(@H_502_73@$_REQUEST['siteid']) ? intval(@H_502_73@$_REQUEST['siteid']) : 1;
- @H_502_73@$SEO = SEO(@H_502_73@$siteid);
- //搜索配置
- @H_502_73@$search_setting = getcache('search');
- @H_502_73@$setting = @H_502_73@$search_setting[@H_502_73@$siteid];
- @H_502_73@$search_model = getcache('search_model_'.@H_502_73@$siteid);
- @H_502_73@$type_module = getcache('type_module_'.@H_502_73@$siteid);
- if(isset(@H_502_73@$_GET['q'])) {
- if(trim(@H_502_73@$_GET['q'])=='') {
- header('Location: '.APP_PATH.'index.PHP?m=search');exit;
- }
- @H_502_73@$typeid = emptyempty(@H_502_73@$_GET['typeid']) ? 0 : intval(@H_502_73@$_GET['typeid']);
- @H_502_73@$time = emptyempty(@H_502_73@$_GET['time']) || !in_array(@H_502_73@$_GET['time'],array('all','day','month','year','week')) ? 'all' : trim(@H_502_73@$_GET['time']);
- @H_502_73@$page = isset(@H_502_73@$_GET['page']) ? intval(@H_502_73@$_GET['page']) : 1;
- @H_502_73@$pagesize = 10;
- @H_502_73@$q = safe_replace(trim(@H_502_73@$_GET['q']));
- @H_502_73@$q = new_html_special_chars(strip_tags(@H_502_73@$q));
- @H_502_73@$q = str_replace('%', '', @H_502_73@$q); //过滤'%',用户全文搜索
- @H_502_73@$search_q = @H_502_73@$q; //搜索原内容
- @H_502_73@$sql_time = @H_502_73@$sql_tid = '';
- if(@H_502_73@$typeid) @H_502_73@$sql_tid = ' AND typeid = '.@H_502_73@$typeid;
- //按时间搜索
- if(@H_502_73@$time == 'day') {
- @H_502_73@$search_time = SYS_TIME - 86400;
- @H_502_73@$sql_time = ' AND adddate > '.@H_502_73@$search_time;
- } elseif(@H_502_73@$time == 'week') {
- @H_502_73@$search_time = SYS_TIME - 604800;
- @H_502_73@$sql_time = ' AND adddate > '.@H_502_73@$search_time;
- } elseif(@H_502_73@$time == 'month') {
- @H_502_73@$search_time = SYS_TIME - 2592000;
- @H_502_73@$sql_time = ' AND adddate > '.@H_502_73@$search_time;
- } elseif(@H_502_73@$time == 'year') {
- @H_502_73@$search_time = SYS_TIME - 31536000;
- @H_502_73@$sql_time = ' AND adddate > '.@H_502_73@$search_time;
- } else {
- @H_502_73@$search_time = 0;
- @H_502_73@$sql_time = '';
- }
- if(@H_502_73@$page==1 && !@H_502_73@$setting['sphinxenable']) {
- //精确搜索
- @H_502_73@$commend = @H_502_73@$this->db->get_one(`siteid`= '$siteid' $sql_tid $sql_time AND `data` like '%$q%');
- } else {
- @H_502_73@$commend = '';
- }
- //如果开启sphinx
- if(@H_502_73@$setting['sphinxenable']) {
- @H_502_73@$sphinx = pc_base::load_app_class('search_interface', 0);
- @H_502_73@$sphinx = new search_interface();
- @H_502_73@$offset = @H_502_73@$pagesize*(@H_502_73@$page-1);
- @H_502_73@$res = @H_502_73@$sphinx->search(@H_502_73@$q, array(@H_502_73@$siteid), array(@H_502_73@$typeid), array(@H_502_73@$search_time, SYS_TIME), @H_502_73@$offset, @H_502_73@$pagesize, '@weight desc');
- @H_502_73@$totalnums = @H_502_73@$res['total'];
- //如果结果不为空
- if(!emptyempty(@H_502_73@$res['matches'])) {
- @H_502_73@$result = @H_502_73@$res['matches'];
- }
- } else {
- @H_502_73@$sql = `siteid`= '$siteid' $sql_tid $sql_time AND `data` like '%$q%';
- @H_502_73@$result = @H_502_73@$this->db->listinfo(@H_502_73@$sql, 'searchid DESC', @H_502_73@$page, 10);
- }
- var_dump(@H_502_73@$result);
- //如果结果不为空
- if(!emptyempty(@H_502_73@$result) || !emptyempty(@H_502_73@$commend['id'])) {
- foreach(@H_502_73@$result as @H_502_73@$_v) {
- if(@H_502_73@$_v['typeid']) @H_502_73@$sids[@H_502_73@$_v['typeid']][] = @H_502_73@$_v['id'];
- }
- if(!emptyempty(@H_502_73@$commend['id'])) {
- if(@H_502_73@$commend['typeid']) @H_502_73@$sids[@H_502_73@$commend['typeid']][] = @H_502_73@$commend['id'];
- }
- @H_502_73@$model_type_cache = getcache('type_model_'.@H_502_73@$siteid,'search');
- @H_502_73@$model_type_cache = array_flip(@H_502_73@$model_type_cache);
- @H_502_73@$data = array();
- foreach(@H_502_73@$sids as @H_502_73@$_k=>@H_502_73@$_val) {
- @H_502_73@$tid = @H_502_73@$_k;
- @H_502_73@$ids = array_unique(@H_502_73@$_val);
- @H_502_73@$where = to_sqls(@H_502_73@$ids, 'id');
- //获取模型id
- @H_502_73@$modelid = @H_502_73@$model_type_cache[@H_502_73@$tid];
- //是否读取其他模块接口
- if(@H_502_73@$modelid) {
- @H_502_73@$this->content_db->set_model(@H_502_73@$modelid);
- /**
- * 如果表名为空,则为黄页模型
- */
- if(emptyempty(@H_502_73@$this->content_db->model_tablename)) {
- @H_502_73@$this->content_db = pc_base::load_model('yp_content_model');
- @H_502_73@$this->content_db->set_model(@H_502_73@$modelid);
- }
- @H_502_73@$datas = @H_502_73@$this->content_db->select(@H_502_73@$where, '*');
- }
- @H_502_73@$data = array_merge(@H_502_73@$data,@H_502_73@$datas);
- }
- @H_502_73@$pages = @H_502_73@$this->db->pages;
- @H_502_73@$totalnums = @H_502_73@$this->db->number;
- //如果分词结果为空
- if(!emptyempty(@H_502_73@$segment_q)) {
- @H_502_73@$replace = explode(' ', @H_502_73@$segment_q);
- foreach(@H_502_73@$replace as @H_502_73@$replace_arr_v) {
- @H_502_73@$replace_arr[] = ''.@H_502_73@$replace_arr_v.'';
- }
- foreach(@H_502_73@$data as @H_502_73@$_k=>@H_502_73@$_v) {
- @H_502_73@$data[@H_502_73@$_k]['title'] = str_replace(@H_502_73@$replace, @H_502_73@$replace_arr, @H_502_73@$_v['title']);
- @H_502_73@$data[@H_502_73@$_k]['description'] = str_replace(@H_502_73@$replace, @H_502_73@$_v['description']);
- }
- } else {
- foreach(@H_502_73@$data as @H_502_73@$_k=>@H_502_73@$_v) {
- @H_502_73@$data[@H_502_73@$_k]['title'] = str_replace(@H_502_73@$q, ''.@H_502_73@$q.'', @H_502_73@$_v['title']);
- @H_502_73@$data[@H_502_73@$_k]['description'] = str_replace(@H_502_73@$q, @H_502_73@$_v['description']);
- }
- }
- }
- @H_502_73@$execute_time = execute_time();
- @H_502_73@$pages = isset(@H_502_73@$pages) ? @H_502_73@$pages : '';
- @H_502_73@$totalnums = isset(@H_502_73@$totalnums) ? @H_502_73@$totalnums : 0;
- @H_502_73@$data = isset(@H_502_73@$data) ? @H_502_73@$data : '';
- include template('search','list');
- } else {
- include template('search','index');
- }
- }
- public function public_get_suggest_keyword() {
- @H_502_73@$url = @H_502_73@$_GET['url'].'&q='.@H_502_73@$_GET['q'];
- @H_502_73@$trust_url = array('c8430fcf851e85818b546addf5bc4dd3');
- @H_502_73@$urm_md5 = md5(@H_502_73@$url);
- if (!in_array(@H_502_73@$urm_md5, @H_502_73@$trust_url)) exit;
- @H_502_73@$res = @file_get_contents(@H_502_73@$url);
- if(CHARSET != 'gbk') {
- @H_502_73@$res = iconv('gbk', CHARSET, @H_502_73@$res);
- }
- echo @H_502_73@$res;
- }
- /**
- * 提示搜索接口
- * Todo 暂时未启用,用的是google的接口
- */
- public function public_suggest_search() {
- //关键词转换为拼音
- pc_base::load_sys_func('iconv');
- @H_502_73@$pinyin = gbk_to_pinyin(@H_502_73@$q);
- if(is_array(@H_502_73@$pinyin)) {
- @H_502_73@$pinyin = implode('', @H_502_73@$pinyin);
- }
- @H_502_73@$this->keyword_db = pc_base::load_model('search_keyword_model');
- @H_502_73@$suggest = @H_502_73@$this->keyword_db->select(pinyin like '$pinyin%', '*', 10, 'searchnums DESC');
- foreach(@H_502_73@$suggest as @H_502_73@$v) {
- echo @H_502_73@$v['keyword'].\n;
- }
- }
- }
- ?>
然后在header.html模板(不在这里,就在其他的搜索框页面)上面增加一个“不限”的搜索条件,将typeid对应的值为 0,search中的index.html和lists.html也做相同处理,效果就出来那,本文由程序员人生网www.wfuyu.com整理发布, 这样只要不选择模型那么搜索出来的结果就是所有模型中符合条件的数据
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。