refactor: pc导航重构
Some checks failed
Gitea Actions Official-website / deploy-dev (push) Failing after 2s

This commit is contained in:
2026-03-30 18:03:03 +08:00
parent 8a9d66f5d3
commit 29abb5e230
7 changed files with 1763 additions and 284 deletions

View File

@@ -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 = [])
{