From 29abb5e23032cc1a703b5e6ef2fad34d9da6dd3e Mon Sep 17 00:00:00 2001
From: jsasg <735273025@qq.com>
Date: Mon, 30 Mar 2026 18:03:03 +0800
Subject: [PATCH] =?UTF-8?q?refactor:=20pc=E5=AF=BC=E8=88=AA=E9=87=8D?=
=?UTF-8?q?=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/index/controller/Common.php | 59 +-
app/index/lang/en-us/pc.php | 9 +-
app/index/model/ProductCategoryModel.php | 6 +
.../model/ProductCategoryRecommendModel.php | 25 +
app/index/model/SysMallStoreEntranceModel.php | 43 +
app/index/view/pc/public/20230331.header.html | 287 +++
app/index/view/pc/public/header.html | 1618 ++++++++++++++---
7 files changed, 1763 insertions(+), 284 deletions(-)
create mode 100644 app/index/model/ProductCategoryRecommendModel.php
create mode 100644 app/index/model/SysMallStoreEntranceModel.php
create mode 100644 app/index/view/pc/public/20230331.header.html
diff --git a/app/index/controller/Common.php b/app/index/controller/Common.php
index 703890c8..a4de17b2 100644
--- a/app/index/controller/Common.php
+++ b/app/index/controller/Common.php
@@ -8,6 +8,7 @@ use app\index\model\LanguageModel;
use app\index\model\ProductCategoryModel;
use app\index\model\ProductModel;
use app\index\model\SysConfigModel;
+use app\index\model\SysMallStoreEntranceModel;
use app\index\model\SysNavigationItemModel;
use think\facade\Lang;
use think\facade\View;
@@ -38,7 +39,7 @@ abstract class Common extends BaseController
}
// 获取产品分类
- $categorys = $this->getProductCategory($this->lang_id);
+ $categorys = $this->getProductCategory($this->lang_id, true);
// 输出产品分类
View::assign('header_categorys', $categorys);
@@ -47,6 +48,9 @@ abstract class Common extends BaseController
// 输出热销产品
View::assign('header_hot_products', $hot_products);
+ // 获取商品购买入口
+ View::assign("header_mall_entrance", $this->getMallStoreEntrance($this->lang_id));
+
// 输出顶部导航
View::assign('header_navigation', $this->getNavigation('NAV_67f3701f3e831', $this->lang_id));
@@ -78,7 +82,7 @@ abstract class Common extends BaseController
}
// 获取产品分类
- protected function getProductCategory($language = 1)
+ protected function getProductCategory($language = 1, $with_recommends = false)
{
$categorys = ProductCategoryModel::field([
'id',
@@ -87,15 +91,42 @@ abstract class Common extends BaseController
'icon',
'level'
])
+ ->when($with_recommends, function($query) {
+ $query->with(['recommends' => function($query) {
+ $query->field(['id', 'category_id', 'title', 'image', 'desc', 'link'])
+ ->order(['sort' => 'asc', 'id' => 'desc']);
+ }]);
+ })
->language($language)
->displayed()
->order(['sort' => 'asc', 'id' => 'desc'])
- ->select();
+ ->select()
+ ->hidden(["recommends.category_id"]);
if ($categorys->isEmpty()) {
return [];
}
- return array_to_tree($categorys->toArray(), 0, 'pid', 1, false);
+ return $this->toTreeAndChunk($categorys->toArray(), 0, 1);
+ }
+ private function toTreeAndChunk(array $categorys, int $pid, int|bool $level): array
+ {
+ $ret = [];
+ foreach ($categorys as $item) {
+ if ($item['pid'] == $pid) {
+ $lv = $level;
+ if ($level !== false) {
+ $item['level'] = $level;
+ $lv = $level + 1;
+ }
+ $children = $this->toTreeAndChunk($categorys, $item['id'], $lv);
+ if (!empty($children)) {
+ $item['children'] = $item['level'] == 1 ? array_chunk($children, 2) : $children;
+ }
+ $ret[] = $item;
+ }
+ }
+
+ return $ret;
}
// 获取顶部导航
@@ -164,6 +195,26 @@ abstract class Common extends BaseController
return $languages;
}
+ // 获取商品购买入口
+ private function getMallStoreEntrance($language = 1)
+ {
+ return SysMallStoreEntranceModel::field([
+ 'id',
+ 'name',
+ 'image',
+ 'hover_image',
+ 'link'
+ ])
+ ->language($language)
+ ->enabled()
+ ->order(['sort' => 'asc', 'id' => 'desc'])
+ ->select()
+ ?->each(function($item) {
+ $item->image = thumb($item->image);
+ return $item;
+ });
+ }
+
// 获取系统联系方式配置
protected function getSysConfig($language, $group = [])
{
diff --git a/app/index/lang/en-us/pc.php b/app/index/lang/en-us/pc.php
index 4aa02b3f..73452f7a 100644
--- a/app/index/lang/en-us/pc.php
+++ b/app/index/lang/en-us/pc.php
@@ -5,10 +5,17 @@ return [
'产品列表' => 'Products',
'店铺' => 'Store',
'搜索记录' => 'Search History',
- '热销产品' => 'Popular Products',
'产品' => 'Product',
'联系我们' => 'Contact',
+ // 新导航栏 - 2023-03-31
+ '搜索' => 'Search',
+ '搜索产品、分类...' => 'Search products and categories...',
+ '最近搜索' => 'Recent Searches',
+ '清空' => 'Clear',
+ '热销产品' => 'Popular Products',
+ '购买' => 'Buy',
+
// 返回文本
'提交成功' => 'success',
'提交失败' => 'fail',
diff --git a/app/index/model/ProductCategoryModel.php b/app/index/model/ProductCategoryModel.php
index a6ea7e5e..7846820a 100644
--- a/app/index/model/ProductCategoryModel.php
+++ b/app/index/model/ProductCategoryModel.php
@@ -17,6 +17,12 @@ class ProductCategoryModel extends ProductCategoryBaseModel
// 软件删除时间字段
protected $deleteTime = 'deleted_at';
+ // 关联产品推荐
+ public function recommends()
+ {
+ return $this->hasMany(ProductCategoryRecommendModel::class, 'category_id', 'id');
+ }
+
// 所属语言范围查询
public function scopeLanguage($query, $language)
{
diff --git a/app/index/model/ProductCategoryRecommendModel.php b/app/index/model/ProductCategoryRecommendModel.php
new file mode 100644
index 00000000..122e4dc0
--- /dev/null
+++ b/app/index/model/ProductCategoryRecommendModel.php
@@ -0,0 +1,25 @@
+where($this->getTable() . '.language_id', '=', $language);
+ }
+}
diff --git a/app/index/model/SysMallStoreEntranceModel.php b/app/index/model/SysMallStoreEntranceModel.php
new file mode 100644
index 00000000..df07e042
--- /dev/null
+++ b/app/index/model/SysMallStoreEntranceModel.php
@@ -0,0 +1,43 @@
+belongsTo(\app\index\model\LanguageModel::class, 'language_id', 'id');
+ }
+
+ // 所属语言范围查询
+ public function scopeLanguage($query, $language)
+ {
+ $query->where($this->getTable() . '.language_id', '=', $language);
+ }
+
+ // 查询启用状态
+ public function scopeEnabled($query)
+ {
+ $query->where('disabled', '=', 0);
+ }
+
+ // 查询禁用状态
+ public function scopeDisabled($query)
+ {
+ $query->where('disabled', '=', 1);
+ }
+}
diff --git a/app/index/view/pc/public/20230331.header.html b/app/index/view/pc/public/20230331.header.html
new file mode 100644
index 00000000..b29fb394
--- /dev/null
+++ b/app/index/view/pc/public/20230331.header.html
@@ -0,0 +1,287 @@
+
+
+
diff --git a/app/index/view/pc/public/header.html b/app/index/view/pc/public/header.html
index b29fb394..f4d5c5a3 100644
--- a/app/index/view/pc/public/header.html
+++ b/app/index/view/pc/public/header.html
@@ -1,287 +1,1347 @@
-