phpcmsv9全站搜索,不限模型
简单修改一下v9默认的搜索功能,可以不按模型搜索全站内容
下面是被修改后的search模块中的index.php文件
<?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 color=red>'.$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 color=red>'.$q.'</font>', $_v['title']);
$data[$_k]['description'] = str_replace($q, '<font color=red>'.$q.'</font>', $_v['description']);
}
}
}
$execute_time = execute_time();
$pages = isset($pages) ? $pages : '';
$totalnums = isset($totalnums) ? $totalnums : 0;
$data = isset($data) ? $data : ''; include template('search','list');
} else {
include template('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']."\n";
} }
}
?>
然后在header.html模板上面增加一个“不限”的搜索条件,typeid对应的值为0,search中的index.html和lists.html也做相同处理,效果如本站,这样只要不选择模型那么搜索出来的结果就是所有模型中符合条件的数据
转载:http://www.chengdeshixinxi.com/html/2014/remould_0510/23.html
phpcmsv9全站搜索,不限模型的更多相关文章
- phpcms的验证码替换 及 phpcms实现全站搜索功能
在使用phpcms替换网页的时候,除了正常的替换栏目.内容页等,其他的什么验证码啦,提交表单了,搜索功能了,这些在替换的时候可能会对一些默认文件有一些小小 的改变 下面就是自己在失败中成功的过程,最后 ...
- 机器学习之路:python 网格搜索 并行搜索 GridSearchCV 模型检验方法
git:https://github.com/linyi0604/MachineLearning 如何确定一个模型应该使用哪种参数? k折交叉验证: 将样本分成k份 每次取其中一份做测试数据 其他做训 ...
- 搜索实时个性化模型——基于FTRL和个性化推荐的搜索排序优化
本文来自网易云社区 作者:穆学锋 简介:传统的搜索个性化做法是定义个性化的标签,将用户和商品通过个性化标签关联起来,在搜索时进行匹配.传统做法的用户特征基本是离线计算获得,不够实时:个性化标签虽然具有 ...
- 调参侠的末日? Auto-Keras 自动搜索深度学习模型的网络架构和超参数
Auto-Keras 是一个开源的自动机器学习库.Auto-Keras 的终极目标是允许所有领域的只需要很少的数据科学或者机器学习背景的专家都可以很容易的使用深度学习.Auto-Keras 提供了一系 ...
- sql 全站搜索
SQL全站搜索 create proc Full_Search(@string varchar(50)) as begin declare @tbname varchar(50) declare tb ...
- phpcms v9不限模型全站搜索
简单修改一下v9默认的搜索功能,可以不按模型搜索全站内容 下面是被修改后的search模块中的index.php文件 <?php defined('IN_PHPCMS') or exit('No ...
- phpcmsv9自定义sql语句查询模型实现
在phpcmsv9中,自定义sql语句查询可不太好实现,传入sql语句查询很容易被内部转入生成一系列莫名其妙的sql语句,比如最佳前缀等等,直接造成sql语句查询错误,在此也提供两种解决办法,1修改底 ...
- 009-elasticsearch5.4.3【三】搜索概述-查询模型、分页、ES数据类型
一.概述 1.查询模型 搜索API允许用户执行搜索查询并返回与查询匹配的搜索匹配.它可以跨一个或多个索引以及跨一种或多种类型执行.可以使用查询Java API提供查询.搜索请求的主体是使用Search ...
- 杭州电 1372 Knight Moves(全站搜索模板称号)
http://acm.hdu.edu.cn/showproblem.php?pid=1372 Knight Moves Time Limit: 2000/1000 MS (Java/Others) ...
随机推荐
- c语言_帮助别人
1. /*4.找出一个二维数组中的鞍点,即该位置上的元素在该行上最大.在该列上最小,也可能没有鞍点*/ #include<stdio.h> int main() { int i,j,max ...
- 小白日记43:kali渗透测试之Web渗透-SqlMap自动注入(一)-sqlmap参数详解TARGET
SqlMap自动注入(一) sqlmap是一款非常强大的开源sql自动化注入工具,可以用来检测和利用sql注入漏洞[动态页面中get/post参数.cookie.HTTP头].它由Python语言开发 ...
- HBase-java api 基本操作
使用的是完全分布式,详细信息为: 操作的Java 代码(抄的别人的) package org.admln.hbase; import java.util.ArrayList; import java. ...
- java中访问mysql数据库中的表结构信息
package cn.hncu.meta; import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.Re ...
- CEF js调用C#封装类含注释
/* * CEF JS调用C#组装类 * * 使用方法(CefGlue为例): * public class BrowserRenderProcessHandler : CefRenderProces ...
- [辛酸历程]在Mac中使用Python获取屏幕截图
一.起因 最近想做个小外挂玩玩,技术倒是不难,就是通过图片匹配加上一些判断方法来刷分.但是在最不起眼(却最容易出问题)的准备阶段卡住了. 为什么卡住了呢,简单说,因为我需要获取截屏的数据,所以就要找一 ...
- css3 渐变记
css3 渐变 线性渐变 径向渐变 重复线性渐变 重复径向渐变 线性渐变 线性渐变接受三个参数,渐变的方向,起始颜色,结束颜色. 标准语法及参数:linear-gradient:([[<angl ...
- Git CMD - add: Record changes to the repository
命令格式 git commit [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend] [--dry-run] [(-c ...
- 【ANT】ant概述
ANT是集软件测试.编译.打包.部署等自动化构建工具,是Apache软件基金会JAKARTA目录中的一个子项目,具有以下优点: 跨平台性 ANT是由Java语言编写,具有很好的跨平台性. 操作简单 A ...
- 第六节 ADO.NET
ADO.NET是一组为.NET编程人员提供数据访问服务的类,封装在System.Data.dll 中,是.NET框架的一部分,它是一种数据访问技术. 使用SQLServer数据提供程序 类 说明 Sq ...