增加前端搜索功能

This commit is contained in:
2025-06-06 10:52:56 +08:00
parent 732a8474a8
commit a81aff626e
7 changed files with 2242 additions and 870 deletions
+102
View File
@@ -0,0 +1,102 @@
<?php
namespace app\index\controller;
use think\Db;
use app\index\controller\BaseController;
use app\index\model\Articles\Articles;
use app\index\model\Articles\ArticlesCategory;
use app\index\model\Resources\Resources;
use app\index\model\Resources\ResourcesCategory;
class SearchController extends BaseController
{
public function index()
{
$keyword = input('keyword', '');
$type = input('type', 'article'); // 搜索类型:article-文章,resource-资源
$page = input('page', 1);
$limit = input('limit', 10);
if (empty($keyword)) {
$this->error('请输入搜索关键词');
}
// 根据类型选择对应的表和分类表
if ($type == 'article') {
$model = new Articles();
$categoryModel = new ArticlesCategory();
$detailUrl = '/index/articles/detail';
$categoryUrl = '/index/articles/category';
$status = 2; // 文章状态为2
$fields = 'id, title, cate, image, author, create_time as publishdate';
} else if ($type == 'resource') {
$model = new Resources();
$categoryModel = new ResourcesCategory();
$detailUrl = '/index/resources/detail';
$categoryUrl = '/index/resources/category';
$status = 1; // 资源状态为1
$fields = 'id, title, cate, icon, author, create_time as publishdate';
} else {
$this->error('无效的搜索类型');
}
// 搜索内容
$items = $model->where('title', 'like', "%{$keyword}%")
->where('status', $status)
->field($fields)
->order('create_time desc')
->page($page, $limit)
->select();
// 获取总数
$count = $model->where('title', 'like', "%{$keyword}%")
->where('status', $status)
->count();
// 获取分类名称和图片
foreach ($items as &$item) {
if ($type == 'article') {
$category = $categoryModel->where('id', $item['cate'])
->field('id, name, image')
->find();
$item['category'] = $category ?: ['id' => 0, 'name' => '未分类', 'image' => ''];
// 如果文章的图片为空,使用分类的图片
if (empty($item['image'])) {
$item['image'] = $item['category']['image'];
}
if (empty($item['image'])) {
$item['image'] = '/static/images/default.jpg';
}
} else {
$category = $categoryModel->where('id', $item['cate'])
->field('id, name, icon')
->find();
$item['category'] = $category ?: ['id' => 0, 'name' => '未分类', 'icon' => ''];
// 如果资源的图片为空,使用分类的图片
if (empty($item['icon'])) {
$item['icon'] = $item['category']['icon'];
}
if (empty($item['icon'])) {
$item['icon'] = '/static/images/default.jpg';
}
}
}
// 准备视图数据
$viewData = [
'keyword' => $keyword,
'type' => $type,
'items' => $items,
'detailUrl' => $detailUrl,
'count' => $count,
'page' => $page,
'limit' => $limit
];
return view('index', $viewData);
}
}