搜索优化,url默认兼容模式
parent
c21458ecf8
commit
e4e5ad6294
|
|
@ -59,21 +59,46 @@ class BrandService
|
||||||
{
|
{
|
||||||
if(!empty($data))
|
if(!empty($data))
|
||||||
{
|
{
|
||||||
// 分类名称
|
// 字段列表
|
||||||
$cnames = [];
|
$keys = ArrayKeys($data);
|
||||||
$cids = array_column($data, 'brand_category_id');
|
|
||||||
if(!empty($cids))
|
// 分类信息
|
||||||
|
// 获取所有品牌关联的分类数据
|
||||||
|
$category_group = [];
|
||||||
|
if(in_array('id', $keys))
|
||||||
{
|
{
|
||||||
$cnames = Db::name('BrandCategory')->where(['id'=>$cids])->column('name', 'id');
|
$category = Db::name('BrandCategoryJoin')->where(['brand_id'=>array_column($data, 'id')])->field('brand_id,brand_category_id')->select();
|
||||||
|
if(!empty($category))
|
||||||
|
{
|
||||||
|
$ids = array_unique(array_column($category, 'brand_category_id'));
|
||||||
|
$names = Db::name('BrandCategory')->where(['id'=>$ids])->column('name', 'id');
|
||||||
|
foreach($category as $c)
|
||||||
|
{
|
||||||
|
if(!array_key_exists($c['brand_id'], $category_group))
|
||||||
|
{
|
||||||
|
$category_group[$c['brand_id']]['ids'] = [];
|
||||||
|
$category_group[$c['brand_id']]['names'] = [];
|
||||||
|
}
|
||||||
|
$category_group[$c['brand_id']]['ids'][] = $c['brand_category_id'];
|
||||||
|
$category_group[$c['brand_id']]['names'][] = $names[$c['brand_category_id']];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 数处理
|
||||||
foreach($data as &$v)
|
foreach($data as &$v)
|
||||||
{
|
{
|
||||||
// 分类名称
|
// 分类名称
|
||||||
if(isset($v['id']))
|
if(isset($v['id']))
|
||||||
{
|
{
|
||||||
$v['brand_category_ids'] = Db::name('BrandCategoryJoin')->where(['brand_id'=>$v['id']])->column('brand_category_id');
|
if(array_key_exists($v['id'], $category_group))
|
||||||
$category_name = Db::name('BrandCategory')->where(['id'=>$v['brand_category_ids']])->column('name');
|
{
|
||||||
$v['brand_category_text'] = implode(',', $category_name);
|
$v['brand_category_ids'] = $category_group[$v['id']]['ids'];
|
||||||
|
$v['brand_category_text'] = implode(',', $category_group[$v['id']]['names']);
|
||||||
|
} else {
|
||||||
|
$v['brand_category_ids'] = [];
|
||||||
|
$v['brand_category_text'] = '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// logo
|
// logo
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ class SearchService
|
||||||
|
|
||||||
// 搜索条件
|
// 搜索条件
|
||||||
$where = self::SearchWhereHandle($params);
|
$where = self::SearchWhereHandle($params);
|
||||||
$base_where = $where['base'];
|
$where_base = $where['base'];
|
||||||
$where_keywords = $where['keywords'];
|
$where_keywords = $where['keywords'];
|
||||||
$where_screening_price = $where['screening_price'];
|
$where_screening_price = $where['screening_price'];
|
||||||
|
|
||||||
|
|
@ -69,7 +69,7 @@ class SearchService
|
||||||
'hook_name' => $hook_name,
|
'hook_name' => $hook_name,
|
||||||
'is_backend' => true,
|
'is_backend' => true,
|
||||||
'params' => &$params,
|
'params' => &$params,
|
||||||
'base_where' => &$base_where,
|
'where_base' => &$where_base,
|
||||||
'where_keywords' => &$where_keywords,
|
'where_keywords' => &$where_keywords,
|
||||||
'where_screening_price' => &$where_screening_price,
|
'where_screening_price' => &$where_screening_price,
|
||||||
'field' => &$field,
|
'field' => &$field,
|
||||||
|
|
@ -80,7 +80,7 @@ class SearchService
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// 获取商品总数
|
// 获取商品总数
|
||||||
$result['total'] = (int) Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->where($base_where)->where(function($query) use($where_keywords) {
|
$result['total'] = (int) Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->where($where_base)->where(function($query) use($where_keywords) {
|
||||||
$query->whereOr($where_keywords);
|
$query->whereOr($where_keywords);
|
||||||
})->where(function($query) use($where_screening_price) {
|
})->where(function($query) use($where_screening_price) {
|
||||||
$query->whereOr($where_screening_price);
|
$query->whereOr($where_screening_price);
|
||||||
|
|
@ -90,7 +90,7 @@ class SearchService
|
||||||
if($result['total'] > 0)
|
if($result['total'] > 0)
|
||||||
{
|
{
|
||||||
// 查询数据
|
// 查询数据
|
||||||
$data = Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->field($field)->where($base_where)->where(function($query) use($where_keywords) {
|
$data = Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->field($field)->where($where_base)->where(function($query) use($where_keywords) {
|
||||||
$query->whereOr($where_keywords);
|
$query->whereOr($where_keywords);
|
||||||
})->where(function($query) use($where_screening_price) {
|
})->where(function($query) use($where_screening_price) {
|
||||||
$query->whereOr($where_screening_price);
|
$query->whereOr($where_screening_price);
|
||||||
|
|
@ -138,7 +138,7 @@ class SearchService
|
||||||
$keywords = explode(' ', $params['wd']);
|
$keywords = explode(' ', $params['wd']);
|
||||||
foreach($keywords as $kv)
|
foreach($keywords as $kv)
|
||||||
{
|
{
|
||||||
$where_keywords[] = ['g.title|g.model|g.simple_desc|g.seo_title|g.seo_keywords|g.seo_keywords', 'like', '%'.$kv.'%'];
|
$where_keywords[] = ['g.title|g.simple_desc', 'like', '%'.$kv.'%'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -234,7 +234,7 @@ class SearchService
|
||||||
}
|
}
|
||||||
if(!empty($params['goods_params_values']))
|
if(!empty($params['goods_params_values']))
|
||||||
{
|
{
|
||||||
$ids = Db::name('GoodsParams')->where(['value'=>$params['goods_params_values']])->column('goods_id');
|
$ids = Db::name('GoodsParams')->where(['value'=>$params['goods_params_values'], 'type'=>2])->column('goods_id');
|
||||||
if(!empty($ids))
|
if(!empty($ids))
|
||||||
{
|
{
|
||||||
$where_base[] = ['g.id', 'in', $ids];
|
$where_base[] = ['g.id', 'in', $ids];
|
||||||
|
|
@ -364,14 +364,14 @@ class SearchService
|
||||||
|
|
||||||
// 搜索条件
|
// 搜索条件
|
||||||
$where = self::SearchWhereHandle($params);
|
$where = self::SearchWhereHandle($params);
|
||||||
$base_where = $where['base'];
|
$where_base = $where['base'];
|
||||||
$where_keywords = $where['keywords'];
|
$where_keywords = $where['keywords'];
|
||||||
$where_screening_price = $where['screening_price'];
|
$where_screening_price = $where['screening_price'];
|
||||||
|
|
||||||
// 一维数组、参数值去重
|
// 一维数组、参数值去重
|
||||||
if(!empty($base_where) || !empty($where_keywords) || !empty($where_screening_price))
|
if(!empty($where_base) || !empty($where_keywords) || !empty($where_screening_price))
|
||||||
{
|
{
|
||||||
$ids = Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->where($base_where)->where(function($query) use($where_keywords) {
|
$ids = Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->where($where_base)->where(function($query) use($where_keywords) {
|
||||||
$query->whereOr($where_keywords);
|
$query->whereOr($where_keywords);
|
||||||
})->where(function($query) use($where_screening_price) {
|
})->where(function($query) use($where_screening_price) {
|
||||||
$query->whereOr($where_screening_price);
|
$query->whereOr($where_screening_price);
|
||||||
|
|
@ -450,12 +450,15 @@ class SearchService
|
||||||
{
|
{
|
||||||
// 搜索条件
|
// 搜索条件
|
||||||
$where = self::SearchWhereHandle($params);
|
$where = self::SearchWhereHandle($params);
|
||||||
$base_where = $where['base'];
|
$where_base = $where['base'];
|
||||||
$where_keywords = $where['keywords'];
|
$where_keywords = $where['keywords'];
|
||||||
$where_screening_price = $where['screening_price'];
|
$where_screening_price = $where['screening_price'];
|
||||||
|
|
||||||
|
// 仅搜索基础参数
|
||||||
|
$where_base[] = ['gp.type', '=', 2];
|
||||||
|
|
||||||
// 一维数组、参数值去重
|
// 一维数组、参数值去重
|
||||||
$data = Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->join(['__GOODS_PARAMS__'=>'gp'], 'g.id=gp.goods_id')->where($base_where)->where(function($query) use($where_keywords) {
|
$data = Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->join(['__GOODS_PARAMS__'=>'gp'], 'g.id=gp.goods_id')->where($where_base)->where(function($query) use($where_keywords) {
|
||||||
$query->whereOr($where_keywords);
|
$query->whereOr($where_keywords);
|
||||||
})->where(function($query) use($where_screening_price) {
|
})->where(function($query) use($where_screening_price) {
|
||||||
$query->whereOr($where_screening_price);
|
$query->whereOr($where_screening_price);
|
||||||
|
|
@ -480,12 +483,12 @@ class SearchService
|
||||||
{
|
{
|
||||||
// 搜索条件
|
// 搜索条件
|
||||||
$where = self::SearchWhereHandle($params);
|
$where = self::SearchWhereHandle($params);
|
||||||
$base_where = $where['base'];
|
$where_base = $where['base'];
|
||||||
$where_keywords = $where['keywords'];
|
$where_keywords = $where['keywords'];
|
||||||
$where_screening_price = $where['screening_price'];
|
$where_screening_price = $where['screening_price'];
|
||||||
|
|
||||||
// 一维数组、参数值去重
|
// 一维数组、参数值去重
|
||||||
$data = Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->join(['__GOODS_SPEC_VALUE__'=>'gsv'], 'g.id=gsv.goods_id')->where($base_where)->where(function($query) use($where_keywords) {
|
$data = Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->join(['__GOODS_SPEC_VALUE__'=>'gsv'], 'g.id=gsv.goods_id')->where($where_base)->where(function($query) use($where_keywords) {
|
||||||
$query->whereOr($where_keywords);
|
$query->whereOr($where_keywords);
|
||||||
})->where(function($query) use($where_screening_price) {
|
})->where(function($query) use($where_screening_price) {
|
||||||
$query->whereOr($where_screening_price);
|
$query->whereOr($where_screening_price);
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue