,开发者QQ群:50304283 // +---------------------------------------------------------------------- namespace app\controller\manager; use app\model\ArchivesCategory as ArticleCategoryModel; use app\model\ArchivesModelField; use app\model\Block as BlockModel; use app\model\System; use app\validate\Block as VBlock; use app\repository\CmsRepository; use think\db\exception\DataNotFoundException; use think\db\exception\DbException; use think\db\exception\ModelNotFoundException; use think\exception\ValidateException; use think\facade\Config as CConfig; /** * 碎片控制器 * @package app\controller\cms */ class Block extends Base { protected function initialize() { parent::initialize(); $action = $this->request->action(); $cid = $this->request->param('cid/d'); if (($action == 'add' || $action == 'edit') && !$this->request->isPost()) { $showFieldList = ArchivesModelField::showFieldList();//所有栏目 可展示字段列表 $currentShowFields = $showFieldList[$cid] ?? [];//当前选中栏目 可展示字段列表 $this->data['system'] = System::getSystem(); $this->data['currentList'] = $currentShowFields; } $this->data['jsonList'] = $this->xmSelectJson([$cid]); CConfig::load('extra/upload', 'system_upload'); if(empty(config('system_upload'))){ $this->data['uploadConfig'] = System::findById(1); }else{ $this->data['uploadConfig'] = config('system_upload'); } } public function index() { if ($this->request->isAjax()) { $page = input('page/d', 1); $limit = input('size/d', 20); $keyword = input('searchParams.keyword/s'); $categoryId = input('searchParams.category_id/d', 0); $where = []; if ($categoryId > 0) { $where[] = ['category_id', '=', $categoryId]; } if (!empty($keyword)) { $where[] = ["name|title", 'like', '%'.$keyword.'%']; } $items = BlockModel::findList($where, [], $page, $limit, function ($q) { return $q->with(["category"])->withAttr("content",function ($value,$data){ switch ($data["type"]){ case BlockModel::BLOCK:// return $value; break; case BlockModel::TEXT: return $value; break; case BlockModel::IMG: return ""; break; case BlockModel::GROUP: $data = explode(",",$value); $str = ""; foreach ($data as $vdata){ $str.=""; } return $str; case BlockModel::FILE: return $value; break; case BlockModel::VIDEO: return $value; break; case BlockModel::ING_LIST: return $value; break; } }); },["id"=>"desc"]); return $this->json(0, '操作成功', $items); } return $this->view(); } public function add(){ if ($this->request->isPost()) { $postData = $this->request->post(); try { $this->validate($postData, VBlock::class); $postData["content"] = $postData["content".$postData["type"]]; $hasWhere =[["name","=",$postData["name"]]] ; if( $postData["category_id"] > 0 ){ $hasWhere[] = ["category_id","=",$postData["category_id"]]; } $other = BlockModel::findOne($hasWhere); if(!empty($other)){ throw new ValidateException("键值重复"); } }catch (ValidateException $e){ return $this->json(4001,$e->getError()); } try { BlockModel::create($postData); return $this->json(); }catch (\Exception $e){ return $this->json(0,'保存失败'. $e->getMessage()); } } $this->data["types"] = BlockModel::getTypes(); return $this->view(); } public function edit(){ $id = input("id/d"); $item = BlockModel::findById($id); if ($this->request->isPost()) { $postData = $this->request->post(); try { $this->validate($postData, VBlock::class); $postData["content"] = $postData["content".$postData["type"]]; $hasWhere =[["name","=",$postData["name"]],["id","<>",$id]] ; if( $postData["category_id"] > 0 ){ $hasWhere[] = ["category_id","=",$postData["category_id"]]; }else{ $hasWhere[] = ["category_id","=",0]; } $other = BlockModel::findOne($hasWhere); if(!empty($other)){ throw new ValidateException("键值重复"); } }catch (ValidateException $e){ return $this->json(4001,$e->getError()); } try { $item->save($postData); return $this->json(); }catch (\Exception $e){ return $this->json(0,'保存失败'. $e->getMessage()); } } if(empty($item)){ return $this->error("碎片不存在"); } $item =$item->toArray(); if($item['type'] == BlockModel::ING_LIST){ $contentKey = array_keys($item['content']); $this->data['maxKey'] = max($contentKey)+1; }else{ $this->data['maxKey'] = 0; } $this->data["item"] = $item; $this->data["config"] = $item; $this->data["types"] = BlockModel::getTypes(); return $this->view(); } /** * 删除 * * @return Json */ public function del() { if ($this->request->isPost()) { $id = input('id/d', 0); BlockModel::deleteById($id); return $this->json(); } return $this->json(4001, '非法请求!'); } /** * 内容分类 构造xmSelect json数据[xmSelect用] * * @param array $selected * @param array $disabled * @return false|string * @throws DataNotFoundException * @throws DbException * @throws ModelNotFoundException */ private function xmSelectJson(array $selected = [], array $disabled = []) { $category = ArticleCategoryModel::order('sort', 'desc') ->field('id,pid,title') ->select() ->toArray(); foreach ($category as $k => $m) { $category[$k]['selected'] = in_array($m['id'], $selected); $category[$k]['disabled'] = in_array($m['id'], $disabled); } $category = CmsRepository::getInstance()->buildMenuChild(0, $category); $category = CmsRepository::getInstance()->handleSelectedList($category); return json_encode($category, JSON_UNESCAPED_UNICODE); } }