peijunlei 2 weeks ago
parent
commit
79440fe7b6
  1. 118
      app/controller/backend/ContentController.php
  2. 2
      route/admin.php

118
app/controller/backend/ContentController.php

@ -5,7 +5,11 @@ namespace app\controller\backend;
use app\exception\ModelEmptyException;
use app\exception\ModelException;
use app\model\Category;
use app\model\InnerChart;
use app\model\Module;
use app\model\Nav;
use app\model\NavCate;
use app\model\RecycleBin;
use app\model\SubContent;
use app\model\SubContentCheck;
@ -681,5 +685,119 @@ class ContentController extends BaseController
}
return jsonReturn(0,lang('导入成功'));
}
// 内容复制到其他语言
public function copyToOtherLang(ContentService $contentService)
{
$param = $this->request->only(['from','website_id','to']);
try{
validate(ContentValidate::class)->scene('copyToOtherLang')->check($param);
}catch (ValidateException $e){
return jsonReturn(422, $e->getError());
}
Db::startTrans();
try{
// 查询栏目
$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'));
// 查找模型
$Module = new Module();
$modules = $Module->getAllCustomArrayData(['seller_id'=>$this->admin['seller_id']],'id asc','id,table')['data'];
$SubContent = new SubContent();
foreach($modules as $module){
// 副表的内容
$content = $SubContent -> getAllCustomArrayData(['seller_id'=>$this->admin['seller_id'],'module_id'=>$module['id'],'lang'=>$param['from'],'is_del'=>1],'id asc')['data'];
if(empty($content)){
continue;
}
// 主表内容
$contentIds = array_column($content,'id');
// 主表ID累加映射
$subIds = $this->getMapIds('sub_content',$contentIds);
$mainContent = Db::name($module['table'])->where([['sub_id','in',$contentIds]])->select()->toArray();
// 附表ID累加映射
$mainIds = $this->getMapIds($module['table'],array_column($mainContent,'id'));
$tempContent = [];
foreach($content as $item){
$item['category_id'] = $categoryMap[$item['category_id']] ?? 0;
$item['main_id'] = $mainIds[$item['main_id']];
$item['lang'] = $param['to'];
$item['sub_id_map'] = $item['id'];
$subCategoryIds = explode(',',$item['sub_category_ids']);
$subCategoryIds = array_map(function($v) use($categoryMap){
if(!empty($categoryMap[$v])){
return $categoryMap[$v];
}else{
return '';
}
},$subCategoryIds);
$item['sub_category_ids'] = implode(',',$subCategoryIds);
unset($item['id']);
$tempContent[] = $item;
}
$res = Db::name('sub_content')->insertAll($tempContent);
var_dump(123);
$tmpMainContent = [];
foreach($mainContent as $value){
$value['sub_id'] = $subIds[$value['sub_id']];
unset($value['id']);
$tmpMainContent[] = $value;
}
$res2 = Db::name($module['table'])->insertAll($tmpMainContent);
// 栏目和内容关系
$CateSub = Db::name('category_sub_content')->where([['sub_content_id','in',$contentIds]])->select()->toArray();
$tmpCategorySub = [];
foreach($CateSub as $val){
$val['category_id'] = $categoryMap[$val['category_id']] ?? 0;
$val['sub_content_id'] = $subIds[$val['sub_content_id']];
unset($val['id']);
$tmpCategorySub[] = $val;
}
$res3 = Db::name('category_sub_content')->insertAll($tmpCategorySub);
}
// 导航分类
$NavCate = new NavCate();
$navCate = $NavCate->getAllCustomArrayData(['seller_id'=>$this->admin['seller_id'],'lang'=>$param['from']],'id asc')['data'];
$navCateIds = array_column($navCate,'id');
$navCateIdMap = $this->getMapIds('nav_cate',$navCateIds);
$tmpNavCate =[];
foreach($navCate as $v){
$v['lang'] = $param['to'];
unset($v['id']);
$tmpNavCate[] = $v;
}
$res4 = Db::name('nav_cate')->insertAll($tmpNavCate);
// 导航
$Nav = new Nav();
$navs = $Nav->getAllCustomArrayData(['seller_id'=>$this->admin['seller_id'],'lang'=>$param['from']],'id asc')['data'];
$navIds = array_column($navs,'id');
$navMapIds = $this->getMapIds('nav',$navIds);
$navMapIds[0]=0;
$tmpNav = [];
foreach($navs as $nav){
$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']];
unset($nav['id']);
$tmpNav[] = $nav;
}
$res5 = Db::name('nav')->insertAll($tmpNav);
// 关联内容更新
$contentService->exchangeRelationContent($this->admin['seller_id'],$param['to']);
Db::commit();
}catch (\Exception $e){
Db::rollback();
dump($item,123);
dump($e->getMessage());
dd($e->getLine());
die;
}
dd($categoryMap);
}
}

2
route/admin.php

@ -154,6 +154,8 @@ Route::group(function () {
Route::post('/recoverAll', '/recoverAll');
// 导入excel文章列表
Route::post('/importExcel', '/importExcel');
// 内容复制到其他语言
Route::post('/copyToOtherLang', '/copyToOtherLang');
})->prefix(config('route.admin') . '.content');

Loading…
Cancel
Save