YZNCMS搜索对所有模型进行搜索得脚本代码

2026-05-15 15 0

官方得搜索模型好像只能对一个模型进行搜索,如果不指定modelid要进行全站搜索得话,可以采用下列得代码进行替换官方得搜索控制器。

官方搜索控制器:application\cms\controller\下搜索 function search(),把整个函数更换为如下:

// 搜索
	public function search()
	{
		$seo = seo('', '搜索结果');
		$allData = []; // 存放所有模型的所有搜索结果(不分页)
		$count = 0;
	
		// 分页配置
		$page = $this->request->param('page/d', 1);
		$pageSize = 10; // 每页3条,你可以随便改
	
		// 接收参数
		$modelid = $this->request->param('modelid/d', 0);
		$keyword = $this->request->param('keyword/s', '', 'trim,safe_replace,strip_tags,htmlspecialchars');
		$keyword = str_replace('%', '', $keyword);
		$time = $this->request->param('time/s', '');
	
		// 验证
		$result = $this->validate([
			'keyword' => $keyword,
		], [
			'keyword|标题关键词' => 'chsDash|max:25',
		]);
		if (true !== $result) {
			$this->error($result);
		}
		
		debug('begin');
	
		// 模型列表
		$modellist = cache('Model');
		if (!$modellist) {
			return $this->error('没有可搜索模型~');
		}
	
		// ===================== 【第一步:查询所有模型的全部数据,不分页】 =====================
		foreach ($modellist as $key => $vo) {
			$searchField = Db::name('model_field')
				->where('modelid', $key)
				->where('ifsystem', 1)
				->where('ifsearch', 1)
				->column('name');
	
			if (empty($searchField)) continue;
	
			// 拼接搜索条件
			$where = [];
			foreach ($searchField as $v) {
				$where[] = [$v, 'like', "%{$keyword}%"];
			}
	
			// 查询当前模型 所有 符合条件的数据(不分页)
			$list = Db::name($vo['tablename'])
				->whereOr($where)
				->where('status', 1)
				->field('title,id,catid,url')
				->order('listorder DESC,id DESC')
				->select();
	
			// 合并到总数据
			foreach ($list as $item) {
				$item['url'] = '/shows/'.$item['catid'].'/'.$item['id'].'.html';
				$allData[] = $item;
			}
		}
	
		// 总条数
		$count = count($allData);
	
		// ===================== 【第二步:对全部数据进行人工分页】 =====================
		$allData = array_values($allData);
		$offset = ($page - 1) * $pageSize;
		$currentPageItems = array_slice($allData, $offset, $pageSize);
	
		// ===================== 【第三步:生成分页HTML】 =====================
		$paginator = new \think\paginator\driver\Bootstrap(
			$currentPageItems,
			$pageSize,
			$page,
			$count,
			false,
			[
				'path' => url('/search'),
				'query' => request()->param(),
			]
		);
		$pages = $paginator->render();
		debug('end');
	
		// 赋值模板
		$this->assign([
			'time'        => $time,
			'modelid'     => $modelid,
			'keyword'     => $keyword,
			'SEO'         => $seo,
			'list'        => $currentPageItems, // 当前页数据
			'count'       => $count,
			'result'      => $count,
			'modellist'   => $modellist,
			'pages'       => $pages,
		]);	
		return $this->fetch('/search_result');
	}

相关文章

Visual Studio各个版本密钥
Windows 11专业版KMS命令激活指南(无工具、安全)

发布评论