From 603b00ffc561251779b76fd93369ba59f888b546 Mon Sep 17 00:00:00 2001 From: xiaodong Date: Wed, 9 Sep 2026 09:04:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=86=85=E5=AE=B9bug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controller/backend/ContentController.php | 48 ++++++++++++++++++++++++---- app/validate/ContentValidate.php | 3 ++ 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/app/controller/backend/ContentController.php b/app/controller/backend/ContentController.php index 965696d..79b234d 100644 --- a/app/controller/backend/ContentController.php +++ b/app/controller/backend/ContentController.php @@ -700,7 +700,13 @@ class ContentController extends BaseController // 查询栏目 $Category = new Category(); $categories = $Category->getAllCustomArrayData(['seller_id'=>$this->admin['seller_id'],'website_id'=>$param['website_id'],'lang'=>$param['to']],'id asc','id,category_map')['data']; - $categoryMap = array_combine(array_column($categories,'category_map'),array_column($categories,'id')); + // 处理 categoryMap,检查重复的 category_map 值 + $categoryMapData = array_column($categories, 'category_map'); + $duplicateMaps = array_filter(array_count_values($categoryMapData), function($v) { return $v > 1; }); + if (!empty($duplicateMaps)) { + \think\facade\Log::warning('copyToOtherLang: 发现重复的 category_map 值: ' . implode(',', array_keys($duplicateMaps))); + } + $categoryMap = array_combine($categoryMapData, array_column($categories,'id')); // 查找模型 $Module = new Module(); $modules = $Module->getAllCustomArrayData(['seller_id'=>$this->admin['seller_id']],'id asc','id,table')['data']; @@ -722,10 +728,10 @@ class ContentController extends BaseController $tempContent = []; foreach($content as $item){ $item['category_id'] = $categoryMap[$item['category_id']] ?? 0; - $item['main_id'] = $mainIds[$item['main_id']]; + $item['main_id'] = $mainIds[$item['main_id']] ?? 0; $item['lang'] = $param['to']; $item['sub_id_map'] = $item['id']; - $subCategoryIds = explode(',',$item['sub_category_ids']); + $subCategoryIds = !empty($item['sub_category_ids']) ? explode(',',$item['sub_category_ids']) : []; $subCategoryIds = array_map(function($v) use($categoryMap){ if(!empty($categoryMap[$v])){ return $categoryMap[$v]; @@ -733,16 +739,32 @@ class ContentController extends BaseController return ''; } },$subCategoryIds); - $item['sub_category_ids'] = implode(',',$subCategoryIds); + $item['sub_category_ids'] = implode(',', array_filter($subCategoryIds)); unset($item['id']); + // 时间字段转回时间戳(auto_timestamp 会将 int 转为日期字符串) + if(!empty($item['create_time']) && !is_numeric($item['create_time'])){ + $item['create_time'] = strtotime($item['create_time']); + } + if(!empty($item['update_time']) && !is_numeric($item['update_time'])){ + $item['update_time'] = strtotime($item['update_time']); + } $tempContent[] = $item; } $res = Db::name('sub_content')->insertAll($tempContent); var_dump(123); $tmpMainContent = []; foreach($mainContent as $value){ - $value['sub_id'] = $subIds[$value['sub_id']]; + $value['sub_id'] = $subIds[$value['sub_id']] ?? 0; + $value['lang'] = $param['to']; + $value['lang_pid'] = $value['id'] ?? 0; unset($value['id']); + // 时间字段转回时间戳 + if(!empty($value['create_time']) && !is_numeric($value['create_time'])){ + $value['create_time'] = strtotime($value['create_time']); + } + if(!empty($value['update_time']) && !is_numeric($value['update_time'])){ + $value['update_time'] = strtotime($value['update_time']); + } $tmpMainContent[] = $value; } $res2 = Db::name($module['table'])->insertAll($tmpMainContent); @@ -751,7 +773,7 @@ class ContentController extends BaseController $tmpCategorySub = []; foreach($CateSub as $val){ $val['category_id'] = $categoryMap[$val['category_id']] ?? 0; - $val['sub_content_id'] = $subIds[$val['sub_content_id']]; + $val['sub_content_id'] = $subIds[$val['sub_content_id']] ?? 0; unset($val['id']); $tmpCategorySub[] = $val; } @@ -766,6 +788,12 @@ class ContentController extends BaseController foreach($navCate as $v){ $v['lang'] = $param['to']; unset($v['id']); + if(!empty($v['create_time']) && !is_numeric($v['create_time'])){ + $v['create_time'] = strtotime($v['create_time']); + } + if(!empty($v['update_time']) && !is_numeric($v['update_time'])){ + $v['update_time'] = strtotime($v['update_time']); + } $tmpNavCate[] = $v; } $res4 = Db::name('nav_cate')->insertAll($tmpNavCate); @@ -780,8 +808,14 @@ class ContentController extends BaseController $nav['lang'] = $param['to']; $nav['nav_cate_id'] = $navCateIdMap[$nav['nav_cate_id']] ?? 0; $nav['category_id'] = $categoryMap[$nav['category_id']] ?? 0; - $nav['parent_id'] = $navMapIds[$nav['parent_id']]; + $nav['parent_id'] = $navMapIds[$nav['parent_id']] ?? 0; unset($nav['id']); + if(!empty($nav['create_time']) && !is_numeric($nav['create_time'])){ + $nav['create_time'] = strtotime($nav['create_time']); + } + if(!empty($nav['update_time']) && !is_numeric($nav['update_time'])){ + $nav['update_time'] = strtotime($nav['update_time']); + } $tmpNav[] = $nav; } $res5 = Db::name('nav')->insertAll($tmpNav); diff --git a/app/validate/ContentValidate.php b/app/validate/ContentValidate.php index f8d2c9d..add4eff 100644 --- a/app/validate/ContentValidate.php +++ b/app/validate/ContentValidate.php @@ -25,6 +25,8 @@ class ContentValidate extends Validate 'lang|语言' => 'require', 'website_id|站点ID' => 'require|number', 'file|文件' => 'require|file|fileExt:txt', + 'from|源语言' => 'require', + 'to|目标语言' => 'require', ]; protected $scene = [ @@ -37,5 +39,6 @@ class ContentValidate extends Validate 'topOpt' => ['id','is_top'], 'addInnerChat' => ['content','website_id'], 'articleUpload' => ['category_id','file'], + 'copyToOtherLang' => ['from','to','website_id'], ]; }