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 @@ +
+ + + +
+
+ × + + +
+

{:lang_i18n('搜索记录')}

+
    +
    +
    +

    {:lang_i18n('热销产品')}

    +
    + {volist name="header_hot_products" id="vo"} +
    + +
    {$vo.name}
    +
    {$vo.short_name}
    +
    + {/volist} +
    +
    +
    +
    +
    + + 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 @@ -
    - + + + + -