diff --git a/app/index/common.php b/app/index/common.php index de61e023..81d3df13 100644 --- a/app/index/common.php +++ b/app/index/common.php @@ -222,3 +222,22 @@ if (!function_exists('get_platform')) { return $platform; } } + +if (!function_exists('highlight_keywords')) { + /** + * 高亮关键词 + * @param string $item + * @param string $keywords + * @param array $class + * @return string + */ + function highlight_keywords(string $text, string $keywords, array $class=[]): string + { + return preg_replace_callback('/' . preg_quote($keywords, '/') . '+/i', function($match) use($text, $class) { + if (empty($match)) { + return $text; + } + return '' . $match[0] . ''; + }, $text); + } +} diff --git a/app/index/controller/Product.php b/app/index/controller/Product.php index 74510312..b16ded89 100644 --- a/app/index/controller/Product.php +++ b/app/index/controller/Product.php @@ -299,9 +299,9 @@ class Product extends Common 'query' => request()->param() ]) ->each(function ($item) use($keywords) { - $item['spu'] = str_replace($keywords, ''.$keywords.'', $item['spu']); - $item['name'] = str_replace($keywords, ''.$keywords.'', $item['name']); - $item['short_name'] = str_replace($keywords, ''.$keywords.'', $item['short_name']); + $item['spu'] = highlight_keywords($item['spu'], $keywords, ['redpoint']); + $item['name'] = highlight_keywords($item['name'], $keywords, ['redpoint']); + $item['short_name'] = highlight_keywords($item['short_name'], $keywords, ['redpoint']); return $item; }); View::assign('products', $products); diff --git a/app/index/model/ProductModel.php b/app/index/model/ProductModel.php index 5b8a74f3..a4be17ef 100644 --- a/app/index/model/ProductModel.php +++ b/app/index/model/ProductModel.php @@ -79,6 +79,6 @@ class ProductModel extends ProductBaseModel // 关键词搜索 public function searchKeywordsAttr($query, string $keywords) { - $query->whereRaw('BINARY spu LIKE "%' . $keywords . '%" OR BINARY name LIKE "%' . $keywords . '%" OR BINARY short_name LIKE "%' . $keywords . '%"'); + $query->whereRaw('spu LIKE "%' . $keywords . '%" OR name LIKE "%' . $keywords . '%" OR short_name LIKE "%' . $keywords . '%"'); } }