## 搜索源碼解析 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頁面失敗問題
- 為什么默認模板打開首頁很慢,而打開后臺卻很快?
- 如何判斷首頁、欄目頁、內容頁、單頁
- 視頻教程
- 版本更新
- 寶塔一鍵部署