## 搜索源码解析 Home/c/HomeController.php
> 单模搜索是 search() 方法
> 多模搜索是 searchAll() 方法
> 相关视频教程:[ 极致CMS二次开发高级教程(1)](https://www.bilibili.com/video/av77138645/)
```
//搜索--单一模块搜索
function search(){
$tables = explode('|',$this->webconf['search_table']);
$molds = $this->frparam('molds',1);//搜索的模块
$tid = $this->frparam('tid',1);
//获取搜索栏目id
if(in_array($molds,$tables) && $molds!=''){
$word = $this->frparam('word',1);
if($word==''){
//检查是否为ajax提交,返回json格式数据
if($this->frparam('ajax')){
JsonReturn(['code'=>1,'data'=>'','msg'=>'请输入关键词搜索!']);
}
Error('请输入关键词搜索!');
}
$this->word = $word;
//进行title模糊搜索,如果要新增搜索字段,比如:
//$sql=" isshow=1 ";
//$sql.=" and ( title like '%".$word."%' or body like '%".$word."%' )";模糊搜索title
//替换下面这一行
$sql = " isshow=1 and title like '%".$word."%' ";
if($tid){
$sql.=' and tid in('.$tid.') ';
//搜索tid的范围
}
$page = new Page($molds);
$page->typeurl = 'search';
$data = $page->where($sql)->orderby('id desc')->limit(15)->page($this->frparam('page',0,1))->go();
$pages = $page->pageList(3,'&page=');
$this->pages = $pages;//组合分页
foreach($data as $k=>$v){
if(isset($v['htmlurl']) && !isset($v['url'])){
$data[$k]['url'] = gourl($v['id'],$v['htmlurl']);
}
$data[$k]['title'] = str_replace($word,'<b style="color:#f00">'.$word.'</b>',$v['title']);
}
$this->lists = $data;//列表数据
$this->sum = $page->sum;//总数据
$this->listpage = $page->listpage;//分页数组-自定义分页可用
$this->prevpage = $page->prevpage;//上一页
$this->nextpage = $page->nextpage;//下一页
$this->allpage = $page->allpage;//总页数
//检查是否ajax提交,返回json数据
if($this->frparam('ajax')){
//检查是否获取ajax模板,此处为手机端便捷操作
/**
可以直接在ajax_search_list.html页面里写输出
同时支持模板标签,比如:foreach循环
参考源码自带的官方demo,手机模式调用内容
**/
if($this->frparam('ajax_tpl')){
$this->display($this->template.'/ajax_search_list');
exit;
}
JsonReturn(['code'=>0,'data'=>$data,'msg'=>'success']);
}
$this->display($this->template.'/search');
}else{
if($this->frparam('ajax')){
JsonReturn(['code'=>1,'data'=>'','msg'=>'搜索超出设定范围!']);
}
Error('搜索超出设定范围!');
}
}
```
> 从上面源码解析中,我们可以得出结论
> 缺省参数:ajax=1 即为ajax提交
> 缺省参数:ajax_tpl=1 即为获取ajax模板内容(ajax_search_list.html页面)
> 增加搜索字段范围如:
> 同时搜索 `title` 和 `body`
> >$sql = " isshow=1 ";
> > $sql .= " and (title like '%".$word."%' or body like '%".$word."%' ";
- 引言
- 条款
- 开始使用
- 模板标签
- 公共配置
- 系统配置
- 自定义配置
- 网站栏目
- 全局栏目属性
- 导航栏相关
- 当前栏目下的直系下级
- 当前栏目下的直系上级
- 栏目详情页
- 栏目列表页
- 栏目分页
- 输出三级及三级以上栏目
- 当前位置面包屑
- 获取当前栏目的顶级栏目
- 直播讲解栏目相关
- 文章详情页
- 基本内容
- 点赞
- 收藏
- 相关文章
- 输出新增字段
- 商品详情页
- 基本内容
- 输出新增字段
- 商品图集
- 点赞
- 收藏
- *点评星星
- 加入购物车
- *评论
- 相关商品
- 自定义字段
- 原样输出
- 单选字段
- 多选字段
- loop标签
- 通用说明
- loop分页
- 案例说明
- like使用
- 怎么判断loop没有数据
- limit使用
- day参数
- table缺省参数
- 单选多选相关
- 单选字段输出
- 多选字段输出
- 特殊输出
- 输出换行
- 替换字符串
- 输出被解析的HTML原句
- 截取字符串
- 内容body去除HTML
- 分割字符输出
- 人性化时间显示
- 搜索功能
- 单模块搜索
- 多模块搜索
- 搜索扩展
- 搜索结果列表页
- 会员模块
- 判断是否登录
- 判断是否评论
- 计算评论数
- 如果判断会员组是否权限
- 如何输出分组信息
- 如何输出所有用户分组
- 如何输出所有会员
- 输出某个会员发布的内容
- 查询一个用户的所有信息
- 输出我的粉丝列表
- 输出我的关注列表
- 获取粉丝数
- 获取关注数
- 判断是否关注
- 关注与取消关注链接
- 判断会员是否购买该商品
- foreach标签
- for标签
- fun标签
- php标签
- 不解析标签
- if..else..标签
- screen筛选标签
- 客户端判断
- 轮播图
- 友情链接
- 自定义图集输出
- Tags标签调用及使用说明
- 网站留言调用
- 自定义单页
- 各种统计
- 各种计数显示数
- 文章归档内容归档
- 系统架构
- 高级功能
- ajax数据交互
- ajax在栏目页的应用
- ajax在screen筛选中的应用
- screen多选筛选
- Message留言表单
- 万能表单
- 多语言支持
- 系统高级配置说明
- 网站动态链接
- 邮件发送
- 自定义路由配置
- 插件开发
- 控制器方法覆盖(cover)[简单]
- 控制器方法钩子(hook)[复杂]
- 制成后台安装插件
- 微信小程序
- 开始起步
- 小程序开发
- API访问接口数据
- 轮播图(幻灯片)
- 访问栏目列表
- 详情页查询
- 栏目详情查询
- 留言接口
- 附录
- 时间
- 富文本编辑器导航
- 伪静态配置
- 二维码生成
- 常见问题
- 静态生成HTML页面失败问题
- 为什么默认模板打开首页很慢,而打开后台却很快?
- 如何判断首页、栏目页、内容页、单页
- 视频教程
- 版本更新
- 宝塔一键部署