feat: 产品搜索页

This commit is contained in:
2025-05-13 15:47:38 +08:00
parent e431dcd6d0
commit 2e29b169bf
3 changed files with 68 additions and 22 deletions

View File

@@ -154,6 +154,39 @@ class Product extends Common
return View::fetch('category'); return View::fetch('category');
} }
/**
* 产品搜索
*/
public function search()
{
$keywords = request()->param('keywords', '');
// 关键词搜索
$products = ProductModel::field([
'id',
'name',
'short_name',
'cover_image',
'spu'
])
->where(fn ($query) => $query->withSearch(['keywords'], ['keywords' => $keywords]))
->language($this->lang_id)
->enabled(true)
->onSale(true)
->onShelves(true)
->order(['sort' => 'asc', 'id' => 'desc'])
->select()
->each(function ($item) use($keywords) {
$item['spu'] = str_replace($keywords, '<strong class="redpoint">'.$keywords.'</strong>', $item['spu']);
$item['name'] = str_replace($keywords, '<strong class="redpoint">'.$keywords.'</strong>', $item['name']);
$item['short_name'] = str_replace($keywords, '<strong class="redpoint">'.$keywords.'</strong>', $item['short_name']);
return $item;
});
View::assign('products', $products);
return View::fetch('search');
}
/** /**
* 产品详情页 * 产品详情页
*/ */

View File

@@ -4,6 +4,7 @@ declare (strict_types = 1);
namespace app\index\model; namespace app\index\model;
use app\common\model\ProductBaseModel; use app\common\model\ProductBaseModel;
use think\facade\Db;
use think\model\concern\SoftDelete; use think\model\concern\SoftDelete;
/** /**
@@ -74,4 +75,10 @@ class ProductModel extends ProductBaseModel
{ {
$query->where('is_new', '=', (int)$stat); $query->where('is_new', '=', (int)$stat);
} }
// 关键词搜索
public function searchKeywordsAttr($query, string $keywords)
{
$query->whereRaw('BINARY spu LIKE "%' . $keywords . '%" OR BINARY name LIKE "%' . $keywords . '%" OR BINARY short_name LIKE "%' . $keywords . '%"');
}
} }

View File

@@ -5,27 +5,33 @@
{block name="main"} {block name="main"}
<!--内容 --> <!--内容 -->
<div class="orico_Page_search"> <div class="orico_Page_search">
<div class="searchMain"> <div class="searchMain">
<!-- 搜索框 --> <!-- 搜索框 -->
<div class="search-ipt"> <form action="{:url('product/search')}" method="get">
<input class="ssipt" placeholder="请搜索" /> <div class="search-ipt">
<img src="/static/index/images/ssico.png" class="ssico" /> <input class="ssipt" name="keywords" value="{$Request.param.keywords}" placeholder="请搜索" />
</div> <img src="__IMAGES__/ssico.png" class="ssico" />
<!-- 搜索结果列表--> </div>
<ul class="seul"> </form>
<a> <!-- 搜索结果列表-->
<li class="seitme"> <ul class="seul">
<div class="imgb"> {volist name="products" id="pro"}
<img src="/static/index/images/ORCIO-HSQ-02H-800-220.jpg" class="search-pr-img" /> <a href="{:url('product/detail', ['id' => $pro['id']])}">
</div> <li class="seitme">
<div class="prInfp"> <div class="imgb">
<div class="txt1"><strong class="redpoint">电脑</strong>显示器支架</div> <img src="{$pro.cover_image}" class="search-pr-img" />
<div class="txt2"> ORICO-HSQ-02Q </div> </div>
<div class="txt3"> ORICO-HSQ-02Q </div> <div class="prInfp">
</div> <div class="txt1">{$pro.name|raw}</div>
</li> {notempty name="pro.short_name"}
</a> <div class="txt2">{$pro.short_name|raw}</div>
</ul> {/notempty}
</div> <div class="txt3">{$pro.spu|raw}</div>
</div>
</li>
</a>
{/volist}
</ul>
</div>
</div> </div>
{/block} {/block}