diff --git a/app/index/controller/Product.php b/app/index/controller/Product.php index 52a8205d..dc2270b8 100644 --- a/app/index/controller/Product.php +++ b/app/index/controller/Product.php @@ -13,6 +13,7 @@ use app\index\model\ProductRelatedModel; use app\index\model\ProductSkuAttrModel; use app\index\model\ProductSkuModel; use app\index\model\SysBannerModel; +use app\index\model\SysBannerProdCateMappingModel; use app\index\validate\ProductInquiryValidate; use think\facade\View; use think\helper\Arr; @@ -22,12 +23,50 @@ use think\helper\Arr; */ class Product extends Common { + // 获取分类页的banner图焦点横幅 + private function getCategoryBanner($category_id) + { + $focus_image = []; + // 获取产品分类页焦点横幅 + $banner = SysBannerModel::with(['items' => function($query) use($category_id) { + $query->withoutField([ + 'status', + 'created_at', + 'updated_at', + 'deleted_at' + ]) + ->whereExists(function($q) use($category_id) { + $r = $q->getModel()->getTable(); + $m = new SysBannerProdCateMappingModel; + $q->model($m)->name($m->getName()) + ->where("banner_item_id = $r.id") + ->where('product_category_id' , '=', $category_id); + }) + ->where('status', '=', 1) + ->order(['sort' => 'asc', 'id' => 'desc']); + }]) + ->uniqueLabel(['BANNER_6808abd813d78']) + ->language($this->lang_id) + ->enabled(true) + ->select(); + if (!$banner->isEmpty()) { + $banner_map = []; + foreach ($banner as $v) { + $banner_map[$v->unique_label] = $v; + } + $focus_image = data_get($banner_map, 'BANNER_6808abd813d78')?->items->toArray(); + } + return $focus_image; + } // 产品分类 - 查看顶层分类 public function category() { // 参数 $param = request()->param(['id']); + // 获取产品分类页焦点横幅 + View::assign('focus_image', $this->getCategoryBanner($param['id'])); + // 获取分类及产品信息 $categorys_data = ProductCategoryModel::field(['id', 'pid', 'name', 'path', 'level']) ->language($this->lang_id) @@ -96,11 +135,13 @@ class Product extends Common foreach ($pros as $pro) { $pros_map[$pro['group_mark']][] = $pro; } - foreach ($list as &$it) { - if (isset($pros_map[$it['id']])) { - $it['products'] = $pros_map[$it['id']]; - } + foreach ($list as $k => &$it) { unset($it['children']); + if (!isset($pros_map[$it['id']])) { + unset($list[$k]); + continue; + } + $it['products'] = $pros_map[$it['id']]; } unset($it); } @@ -116,30 +157,8 @@ class Product extends Common // 参数 $param = request()->param(['id']); - $focus_image = []; // 获取产品分类页焦点横幅 - $banner = SysBannerModel::with(['items' => function($query) { - $query->withoutField([ - 'status', - 'created_at', - 'updated_at', - 'deleted_at' - ]) - ->where('status', '=', 1) - ->order(['sort' => 'asc', 'id' => 'desc']); - }]) - ->uniqueLabel(['BANNER_6808abd813d78']) - ->language($this->lang_id) - ->enabled(true) - ->select(); - if (!$banner->isEmpty()) { - $banner_map = []; - foreach ($banner as $v) { - $banner_map[$v->unique_label] = $v; - } - $focus_image = data_get($banner_map, 'BANNER_6808abd813d78')?->items->toArray(); - } - View::assign('focus_image', $focus_image); + View::assign('focus_image', $this->getCategoryBanner($param['id'])); // 获取分类及产品信息 $categorys_data = ProductCategoryModel::field(['id', 'name', 'level']) @@ -488,7 +507,7 @@ class Product extends Common $m = $map[$pro['category_id']]; $pro_map[$m['path']][] = $pro; } - + // 获取二级分类下的产品信息 foreach ($categorys as $val) { if ($val['level'] != 2) { @@ -496,7 +515,7 @@ class Product extends Common } foreach ($pro_map as $k => $pro) { - if (in_array($val['id'], explode(',', $k))) { + if (in_array($val['id'], explode(',', strval($k)))) { $newpros[] = [ 'category' => $val, 'products' => $pro, diff --git a/app/index/model/SysBannerProdCateMappingModel.php b/app/index/model/SysBannerProdCateMappingModel.php new file mode 100644 index 00000000..54050b5c --- /dev/null +++ b/app/index/model/SysBannerProdCateMappingModel.php @@ -0,0 +1,15 @@ + - + + {notempty name="focus_image"} +
+ {volist name="focus_image" id="fi"} + + + + {/volist} +
+ {/notempty} +
{volist name="list" id="vo"}
@@ -15,6 +25,7 @@
+ {notempty name="vo.products"}
{volist name="vo.products" id="pro"} @@ -29,8 +40,30 @@ {/volist}
+ {/notempty}
{/volist} +{/block} +{block name="script"} + {/block} \ No newline at end of file diff --git a/app/index/view/public/header.html b/app/index/view/public/header.html index 59c2385c..5b5c9d95 100644 --- a/app/index/view/public/header.html +++ b/app/index/view/public/header.html @@ -25,16 +25,15 @@ {volist name="header_categorys" id="vo" key="idx"} -