* Date: 2018-4-3 */ namespace app\admin\controller; use think\Page; use think\Db; use app\common\logic\ArctypeLogic; use app\admin\logic\FieldLogic; class Arctype extends Base { public $fieldLogic; public $arctypeLogic; // 栏目对应模型ID public $arctype_channel_id = ''; // 允许发布文档的模型ID public $allowReleaseChannel = array(); // 禁用的目录名称 public $disableDirname = []; public function _initialize() { parent::_initialize(); $this->fieldLogic = new FieldLogic(); $this->arctypeLogic = new ArctypeLogic(); $this->allowReleaseChannel = config('global.allow_release_channel'); $this->arctype_channel_id = config('global.arctype_channel_id'); $this->disableDirname = config('global.disable_dirname'); /*兼容每个用户的自定义字段,重新生成数据表字段缓存文件*/ $arctypeFieldInfo = include DATA_PATH . 'schema/' . PREFIX . 'arctype.php'; foreach (['weapp_code'] as $key => $val) { if (!isset($arctypeFieldInfo[$val])) { try { schemaTable('arctype'); } catch (\Exception $e) {} break; } } /*--end*/ } public function index() { $arctype_list = array(); // 目录列表 $where['is_del'] = '0'; // 回收站功能 $arctype_list = $this->arctypeLogic->arctype_list(0, 0, false, 0, $where, false); $this->assign('arctype_list', $arctype_list); /*多语言模式下,栏目ID显示主体语言的ID和属性title名称*/ $main_arctype_list = []; if ($this->admin_lang != $this->main_lang) { $attr_values = get_arr_column($arctype_list, 'id'); $languageAttrRow = Db::name('language_attr')->field('attr_name,attr_value')->where([ 'attr_value' => ['IN', $attr_values], 'attr_group' => 'arctype', 'lang' => $this->admin_lang, ])->getAllWithIndex('attr_value'); $typeids = []; foreach ($languageAttrRow as $key => $val) { $tid_tmp = str_replace('tid', '', $val['attr_name']); array_push($typeids, intval($tid_tmp)); } $main_ArctypeRow = Db::name('arctype')->field("id,typename,CONCAT('tid', id) AS attr_name") ->where([ 'id' => ['IN', $typeids], 'lang' => $this->main_lang, ])->getAllWithIndex('attr_name'); foreach ($arctype_list as $key => $val) { $key_tmp = !empty($languageAttrRow[$val['id']]['attr_name']) ? $languageAttrRow[$val['id']]['attr_name'] : ''; $main_arctype_list[$val['id']] = [ 'id' => !empty($main_ArctypeRow[$key_tmp]['id']) ? $main_ArctypeRow[$key_tmp]['id'] : 0, 'typename' => !empty($main_ArctypeRow[$key_tmp]['typename']) ? $main_ArctypeRow[$key_tmp]['typename'] : '', ]; } } $this->assign('main_arctype_list', $main_arctype_list); /*end*/ // 模型列表 $channeltype_list = getChanneltypeList(); $this->assign('channeltype_list', $channeltype_list); // 栏目最多级别 $arctype_max_level = intval(config('global.arctype_max_level')); $this->assign('arctype_max_level', $arctype_max_level); /* 生成静态页面代码 */ $typeid = input('param.typeid/d',0); $is_del = input('param.is_del/d',0); $this->assign('typeid',$typeid); $this->assign('is_del',$is_del); /* end */ return $this->fetch(); } /** * 新增 */ public function add() { //防止php超时 function_exists('set_time_limit') && set_time_limit(0); $this->language_access(); // 多语言功能操作权限 if (IS_POST) { $post = input('post.'); if ($post) { /*目录名称*/ $post['dirname'] = func_preg_replace([' ',' '], '', $post['dirname']); $dirname = $this->arctypeLogic->get_dirname($post['typename'], $post['dirname']); // 检测 if (!empty($post['dirname']) && !$this->arctypeLogic->dirname_unique($post['dirname'])) { $this->error('目录名称与系统内置冲突,请更改!'); } /*--end*/ $dirpath = rtrim($post['dirpath'],'/'); /* ------临时代码,当能支持静态页面生成,再去掉 */ $dirpath = $dirpath . '/' . $dirname; /* -----------end----------- */ $typelink = !empty($post['is_part']) ? $post['typelink'] : ''; /*封面图的本地/远程图片处理*/ $is_remote = !empty($post['is_remote']) ? $post['is_remote'] : 0; $litpic = ''; if ($is_remote == 1) { $litpic = $post['litpic_remote']; } else { $litpic = $post['litpic_local']; } /*--end*/ // 获取顶级模型ID if (empty($post['parent_id'])) { $channeltype = $post['current_channel']; } else { $channeltype = M('arctype')->where('id', $post['parent_id'])->getField('channeltype'); } /*SEO描述*/ $seo_description = $post['seo_description']; /*--end*/ /*处理自定义字段值*/ $addonField = array(); if (!empty($post['addonField'])) { $addonField = $this->fieldLogic->handleAddonField($this->arctype_channel_id, $post['addonField']); } /*--end*/ $newData = array( 'dirname' => $dirname, 'dirpath' => $dirpath, 'typelink' => $typelink, 'litpic' => $litpic, 'channeltype' => $channeltype, 'current_channel' => $post['current_channel'], 'seo_keywords' => str_replace(',', ',', $post['seo_keywords']), 'seo_description' => $seo_description, 'admin_id' => session('admin_info.admin_id'), 'lang' => $this->admin_lang, 'sort_order' => 100, 'add_time' => getTime(), 'update_time' => getTime(), ); $data = array_merge($post, $newData, $addonField); $insertId = model('Arctype')->addData($data); if($insertId){ $_POST['id'] = $insertId; /*同步栏目ID到多语言的模板栏目变量里*/ $this->arctypeLogic->syn_add_language_attribute($insertId); /*--end*/ adminLog('新增栏目:'.$data['typename']); // 生成静态页面代码 $this->success("操作成功!", url('Arctype/index', ['typeid'=>$insertId])); exit; } } $this->error("操作失败!"); exit; } $assign_data = array(); /* 模型 */ $map = array( 'status' => 1, ); $channeltype_list = model('Channeltype')->getAll('id,title,nid', $map, 'id'); $this->assign('channeltype_list', $channeltype_list); // 新增栏目在指定的上一级栏目下 $parent_id = input('param.parent_id/d'); $grade = 0; $current_channel = ''; $predirpath = ''; // 生成静态页面代码 $ptypename = ''; if (0 < $parent_id) { $info = M('arctype')->where(array('id'=>$parent_id))->find(); if ($info) { // 级别 $grade = $info['grade'] + 1; // 菜单对应下的栏目 // $selected = $info['id']; // 模型 $current_channel = $info['current_channel']; // 上级目录 $predirpath = $info['dirpath']; // 上级栏目名称 $ptypename = $info['typename']; } } $this->assign('predirpath', $predirpath); $this->assign('parent_id', $parent_id); $this->assign('ptypename', $ptypename); $this->assign('grade',$grade); $this->assign('current_channel',$current_channel); /*发布文档的模型ID,用于是否显示文档模板列表*/ $js_allow_channel_arr = '['; foreach ($this->allowReleaseChannel as $key => $val) { if ($key > 0) { $js_allow_channel_arr .= ','; } $js_allow_channel_arr .= $val; } $js_allow_channel_arr = $js_allow_channel_arr.']'; $this->assign('js_allow_channel_arr', $js_allow_channel_arr); /*--end*/ /*模板列表*/ $templateList = $this->ajax_getTemplateList('add'); $this->assign('templateList', $templateList); /*--end*/ /*自定义字段*/ $assign_data['addonFieldExtList'] = model('Field')->getTabelFieldList(config('global.arctype_channel_id')); $assign_data['aid'] = 0; $assign_data['channeltype'] = 6; $assign_data['nid'] = 'arctype'; /*--end*/ $this->assign($assign_data); return $this->fetch(); } /** * 编辑 */ public function edit() { if (IS_POST) { $post = input('post.'); if (!empty($post['id'])) { /*自己的上级不能是自己*/ if (intval($post['id']) == intval($post['parent_id'])) { $this->error('自己不能成为自己的上级栏目'); } /*--end*/ /*目录名称*/ $post['dirname'] = func_preg_replace([' ', ' '], '', $post['dirname']); $dirname = $this->arctypeLogic->get_dirname($post['typename'], $post['dirname'], $post['id']); // 检测 if (!empty($post['dirname']) && !$this->arctypeLogic->dirname_unique($post['dirname'], $post['id'])) { $this->error('目录名称与系统内置冲突,请更改!'); } /*--end*/ $dirpath = rtrim($post['dirpath'], '/'); $typelink = !empty($post['is_part']) ? $post['typelink'] : ''; /*封面图的本地/远程图片处理*/ $is_remote = !empty($post['is_remote']) ? $post['is_remote'] : 0; $litpic = ''; if ($is_remote == 1) { $litpic = $post['litpic_remote']; } else { $litpic = $post['litpic_local']; } /*--end*/ // 最顶级模型ID $channeltype = $post['channeltype']; // 当前更改的等级 $grade = $post['grade']; // 根据栏目ID获取最新的最顶级模型ID if (intval($post['parent_id']) > 0) { $arctype_row = Db::name('arctype')->field('grade,channeltype')->where('id', $post['parent_id'])->find(); $channeltype = $arctype_row['channeltype']; $grade = $arctype_row['grade'] + 1; } /*SEO描述*/ $seo_description = $post['seo_description']; /*--end*/ /*处理自定义字段值*/ $addonField = array(); if (!empty($post['addonField'])) { $addonField = $this->fieldLogic->handleAddonField($this->arctype_channel_id, $post['addonField']); } /*--end*/ $newData = array( 'dirname' => $dirname, 'dirpath' => $dirpath, 'typelink' => $typelink, 'litpic' => $litpic, 'channeltype' => $channeltype, 'grade' => $grade, 'seo_keywords' => str_replace(',', ',', $post['seo_keywords']), 'seo_description' => $seo_description, 'lang' => $this->admin_lang, 'update_time' => getTime(), ); $data = array_merge($post, $newData, $addonField); $r = model('Arctype')->updateData($data); if($r){ //查出该栏目所有子级,包括自己 $hasChildrenRow = model('Arctype')->getHasChildren($post['id'], true); /*当前栏目以及所有子孙栏目的静态HTML保存路径的变动、模板继承*/ $subSaveData = []; foreach ($hasChildrenRow as $key => $val) { $dirpathArr = explode('/', trim($val['dirpath'], '/')); $dirpathArr[$grade] = $dirname; $dirpath = '/'.implode('/', $dirpathArr); $subSaveData_tmp = [ 'id' => $val['id'], 'dirpath' => $dirpath, 'update_time' => getTime(), ]; /*父级模板继承*/ if (!empty($post['inherit_status']) && $post['inherit_status'] == 1) { $subSaveData_tmp['templist'] = $post['templist']; $subSaveData_tmp['tempview'] = $post['tempview']; } /*end*/ $subSaveData[] = $subSaveData_tmp; } if (!empty($subSaveData)) { model('Arctype')->saveAll($subSaveData); } /*end*/ adminLog('编辑栏目:'.$data['typename']); // 生成静态页面代码 $this->success("操作成功!", url('Arctype/index', ['typeid'=>$post['id']])); exit; } } $this->error("操作失败!"); exit; } $assign_data = array(); $id = input('id/d'); $info = M('arctype')->where([ 'id' => $id, 'lang' => $this->admin_lang, ])->find(); if (empty($info)) { $this->error('数据不存在,请联系管理员!'); exit; } // 栏目图片处理 if (is_http_url($info['litpic'])) { $info['is_remote'] = 1; $info['litpic_remote'] = handle_subdir_pic($info['litpic']); } else { $info['is_remote'] = 0; $info['litpic_local'] = handle_subdir_pic($info['litpic']); } $this->assign('field',$info); // 获得上级目录路径 if (!empty($info['dirpath'])) { $predirpath = preg_replace('/\/([^\/]*)$/i', '', $info['dirpath']); } else { $predirpath = ''; // 生成静态页面代码 } $this->assign('predirpath',$predirpath); // 是否有子栏目 $hasChildren = model('Arctype')->hasChildren($id); if ($hasChildren > 0) { $select_html = M('arctype')->where('id', $info['parent_id'])->getField('typename'); $select_html = !empty($select_html) ? $select_html : '顶级栏目'; } else { // 所属栏目 // $channeltype = $info['channeltype']; $select_html = ''; $selected = $info['parent_id']; $arctype_max_level = intval(config('global.arctype_max_level')); $arctypeWhere = ['is_del' => 0]; $options = $this->arctypeLogic->arctype_list(0, $selected, false, $arctype_max_level - 1, $arctypeWhere); foreach ($options AS $var) { $select_html .= ''; } } $this->assign('select_html',$select_html); $this->assign('hasChildren',$hasChildren); /* 模型 */ $channeltype_list = model('Channeltype')->getAll('id,title,nid,ctl_name', [], 'id'); // 模型对应模板文件不存在报错 if (!isset($channeltype_list[$info['current_channel']])) { $row = model('Channeltype')->getInfo($info['current_channel']); $file = 'lists_'.$row['nid'].'.htm'; $this->error($row['title'].'缺少模板文件'.$file); } // 选项卡内容的链接 $ctl_name = $channeltype_list[$info['current_channel']]['ctl_name']; $list_url = url("{$ctl_name}/index")."?typeid={$id}"; $this->assign('list_url', $list_url); $this->assign('channeltype_list', $channeltype_list); /*发布文档的模型ID,用于是否显示文档模板列表*/ $js_allow_channel_arr = '['; foreach ($this->allowReleaseChannel as $key => $val) { if ($key > 0) { $js_allow_channel_arr .= ','; } $js_allow_channel_arr .= $val; } $js_allow_channel_arr = $js_allow_channel_arr.']'; $this->assign('js_allow_channel_arr', $js_allow_channel_arr); /*--end*/ /*选项卡*/ $tab = input('param.tab/d', 1); $this->assign('tab', $tab); /*--end*/ /*模板列表*/ $templateList = $this->ajax_getTemplateList('edit', $info['templist'], $info['tempview']); $this->assign('templateList', $templateList); /*--end*/ /*自定义字段*/ $assign_data['addonFieldExtList'] = model('Field')->getTabelFieldList(config('global.arctype_channel_id'), $id); $assign_data['aid'] = $id; $assign_data['channeltype'] = 6; $assign_data['nid'] = 'arctype'; /*--end*/ $this->assign($assign_data); return $this->fetch(); } /** * 内容管理 */ public function single_edit() { if (IS_POST) { $post = input('post.'); $typeid = input('post.typeid/d', 0); if(!empty($typeid)){ $info = M('arctype')->field('id,typename,current_channel') ->where([ 'id' => $typeid, 'lang' => $this->admin_lang, ])->find(); $aid = M('archives')->where([ 'typeid' => $typeid, 'channel' => 6, 'lang' => $this->admin_lang, ])->getField('aid'); /*修复新增单页栏目的关联数据不完善,进行修复*/ if (empty($aid)) { $archivesData = array( 'title' => $info['typename'], 'typeid'=> $info['id'], 'channel' => $info['current_channel'], 'sort_order' => 100, 'add_time' => getTime(), 'update_time' => getTime(), 'lang' => $this->admin_lang, ); $aid = M('archives')->insertGetId($archivesData); } /*--end*/ if (!isset($post['addonFieldExt'])) { $post['addonFieldExt'] = array(); } $updateData = array( 'aid' => $aid, 'typename' => $info['typename'], 'addonFieldExt' => $post['addonFieldExt'], ); model('Single')->afterSave($aid, $updateData, 'edit'); \think\Cache::clear("arctype"); adminLog('编辑栏目:'.$info['typename']); // 生成静态页面代码 $this->success("操作成功!", $post['gourl'].'&typeid='.$typeid); exit; } $this->error("操作失败!"); exit; } $assign_data = array(); $typeid = input('typeid/d'); $info = M('arctype')->where([ 'id' => $typeid, 'lang' => $this->admin_lang, ])->find(); if (empty($info)) { $this->error('数据不存在,请联系管理员!'); exit; } $assign_data['info'] = $info; /*自定义字段*/ $addonFieldExtList = model('Field')->getChannelFieldList(6, 0, $typeid, $info); $channelfieldBindRow = Db::name('channelfield_bind')->where([ 'typeid' => ['IN', [0,$typeid]], ])->column('field_id'); if (!empty($channelfieldBindRow)) { foreach ($addonFieldExtList as $key => $val) { if (!in_array($val['id'], $channelfieldBindRow)) { unset($addonFieldExtList[$key]); } } } $assign_data['addonFieldExtList'] = $addonFieldExtList; $assign_data['aid'] = $typeid; $assign_data['channeltype'] = 6; $assign_data['nid'] = 'single'; /*--end*/ /*返回上一层*/ $gourl = input('param.gourl/s', ''); if (empty($gourl)) { $gourl = url('Arctype/index'); } $assign_data['gourl'] = $gourl; /*--end*/ $this->assign($assign_data); /* 生成静态页面代码 */ $this->assign('typeid',$typeid); /* end */ return $this->fetch(); } /** * 伪删除 */ public function pseudo_del() { if (IS_POST) { $this->language_access(); // 多语言功能操作权限 $post = input('post.'); $post['del_id'] = eyIntval($post['del_id']); /*当前栏目信息*/ $row = M('arctype')->field('id, current_channel, typename') ->where([ 'id' => $post['del_id'], 'lang' => $this->admin_lang, ]) ->find(); $r = model('arctype')->pseudo_del($post['del_id']); if (false !== $r) { adminLog('伪删除栏目:'.$row['typename']); $this->success('删除成功'); } else { $this->error('删除失败'); } } $this->error('非法访问'); } /** * 删除[1.2.7之后废弃] */ public function del() { $this->language_access(); // 多语言功能操作权限 $post = input('post.'); $post['del_id'] = eyIntval($post['del_id']); /*当前栏目信息*/ $row = M('arctype')->field('id, current_channel, typename') ->where([ 'id' => $post['del_id'], 'lang' => $this->admin_lang, ]) ->find(); $r = model('arctype')->del($post['del_id']); if (false !== $r) { adminLog('删除栏目:'.$row['typename']); $this->success('删除成功'); } else { $this->error('删除失败'); } } /** * 通过模型获取栏目 */ public function ajax_get_arctype($channeltype = 0) { $arctype_max_level = intval(config('global.arctype_max_level')); $options = $this->arctypeLogic->arctype_list(0, 0, false, $arctype_max_level, array('channeltype' => $channeltype)); $select_html = ''; foreach ($options AS $var) { $select_html .= ''; } $returndata = array( 'status' => 1, 'select_html' => $select_html, ); respose($returndata); } /** * 获取栏目的拼音 */ public function ajax_get_dirpinyin($typename = '') { $typename = input('post.typename/s'); $pinyin = get_pinyin($typename); respose(array( 'status' => 1, 'msg' => $pinyin )); } /** * 检测文件保存目录是否存在 */ public function ajax_check_dirpath() { $dirpath = input('post.dirpath/s'); $id = input('post.id/d'); $map = array( 'dirpath' => $dirpath, 'lang' => $this->admin_lang, ); if (intval($id) > 0) { $map['id'] = array('neq', $id); } $result = M('arctype')->where($map)->find(); if (!empty($result)) { respose(array( 'status' => 0, 'msg' => '文件保存目录已存在,请更改', )); } else { respose(array( 'status' => 1, 'msg' => '文件保存目录可用', )); } } public function ajax_getTemplateList($opt = 'add', $templist = '', $tempview = '') { $planPath = 'template/pc'; $dirRes = opendir($planPath); $view_suffix = config('template.view_suffix'); /*模板PC目录文件列表*/ $templateArr = array(); while($filename = readdir($dirRes)) { if (in_array($filename, array('.','..'))) { continue; } array_push($templateArr, $filename); } !empty($templateArr) && asort($templateArr); /*--end*/ /*多语言全部标识*/ $markArr = Db::name('language_mark')->column('mark'); /*--end*/ $templateList = array(); $channelList = model('Channeltype')->getAll(); foreach ($channelList as $k1 => $v1) { $l = 1; $v = 1; $lists = ''; // 销毁列表模板 $view = ''; // 销毁文档模板 $templateList[$v1['id']] = array(); foreach ($templateArr as $k2 => $v2) { $v2 = iconv('GB2312', 'UTF-8', $v2); if ('add' == $opt) { $selected = 0; // 默认选中状态 } else { $selected = 1; // 默认选中状态 } preg_match('/^(lists|view)_'.$v1['nid'].'(_(.*))?(_'.$this->admin_lang.')?\.'.$view_suffix.'/i', $v2, $matches1); $langtpl = preg_replace('/\.'.$view_suffix.'$/i', "_{$this->admin_lang}.{$view_suffix}", $v2); if (file_exists(realpath($planPath.DS.$langtpl))) { continue; } else if (preg_match('/^(.*)_([a-zA-z]{2,2})\.'.$view_suffix.'$/i',$v2,$matches2)) { if (in_array($matches2[2], $markArr) && $matches2[2] != $this->admin_lang) { continue; } } if (!empty($matches1)) { $selectefile = ''; if ('lists' == $matches1[1]) { $lists .= ''; $nofileArr[] = "lists_{$v1['nid']}.{$view_suffix}"; } if (empty($view)) { $view = ''; if (!in_array($v1['nid'], ['single','guestbook'])) { $nofileArr[] = "view_{$v1['nid']}.{$view_suffix}"; } } } else { if (empty($lists)) { $nofileArr[] = "lists_{$v1['nid']}.{$view_suffix}"; } $lists = ''.$lists; if (empty($view)) { if (!in_array($v1['nid'], ['single','guestbook'])) { $nofileArr[] = "view_{$v1['nid']}.{$view_suffix}"; } } $view = ''.$view; } $msg = ''; if (!empty($nofileArr)) { $msg = '该模型缺少模板文件:'.implode(' 和 ', $nofileArr).''; } $templateList[$v1['id']] = array( 'lists' => $lists, 'view' => $view, 'msg' => $msg, 'nid' => $v1['nid'], ); } if (IS_AJAX) { $this->success('请求成功', null, ['templateList'=>$templateList]); } else { return $templateList; } } /** * 新建模板文件 */ public function ajax_newtpl() { if (IS_POST) { $post = input('post.', '', null); $content = input('post.content', '', null); $view_suffix = config('template.view_suffix'); if (!empty($post['filename'])) { if (!preg_match("/^[\w\-\_]{1,}$/u", $post['filename'])) { $this->error('文件名称只允许字母、数字、下划线、连接符的任意组合!'); } $filename = "{$post['type']}_{$post['nid']}_{$post['filename']}.{$view_suffix}"; } else { $filename = "{$post['type']}_{$post['nid']}.{$view_suffix}"; } $content = !empty($content) ? $content : ''; $tpldirpath = !empty($post['tpldir']) ? '/template/'.trim($post['tpldir']) : '/template/pc'; if (file_exists(ROOT_PATH.ltrim($tpldirpath, '/').'/'.$filename)) { $this->error('文件名称已经存在,请重新命名!', null, ['focus'=>'filename']); } $nosubmit = input('param.nosubmit/d'); if (1 == $nosubmit) { $this->success('检测通过'); } $filemanagerLogic = new \app\admin\logic\FilemanagerLogic; $r = $filemanagerLogic->editFile($filename, $tpldirpath, $content); if ($r === true) { $this->success('操作成功', null, ['filename'=>$filename,'type'=>$post['type']]); } else { $this->error($r); } } $type = input('param.type/s'); $nid = input('param.nid/s'); $tpldirList = glob('template/*'); foreach ($tpldirList as $key => $val) { if (!preg_match('/template\/(pc|mobile)$/i', $val)) { unset($tpldirList[$key]); } else { $tpldirList[$key] = preg_replace('/^(.*)template\/(pc|mobile)$/i', '$2', $val); } } !empty($tpldirList) && arsort($tpldirList); $this->assign('tpldirList', $tpldirList); $this->assign('type', $type); $this->assign('nid', $nid); return $this->fetch(); } /** * 批量增加栏目 */ public function batch_add() { //防止php超时 function_exists('set_time_limit') && set_time_limit(0); $this->language_access(); // 多语言功能操作权限 if (IS_POST) { $post = input('post.'); if ($post) { if (empty($post['parent_id'])) { // 增加顶级栏目 foreach ($post['toptype'] as $key => $val) { $val = trim($val); if (empty($val)) { unset($post['toptype'][$key]); } } if (empty($post['toptype'])) { $this->error('顶级栏目名称不能为空!'); } $this->batch_add_toptype($post); } else { // 增加下级栏目 foreach ($post['reltype'] as $key => $val) { $val = trim($val); if (empty($val)) { unset($post['reltype'][$key]); } } if (empty($post['reltype'])) { $this->error('栏目名称不能为空!'); } $this->batch_add_subtype($post); } } $this->error("操作失败!"); exit; } /* 模型 */ $map = array( 'status' => 1, ); $channeltype_list = model('Channeltype')->getAll('id,title,nid', $map, 'id'); $this->assign('channeltype_list', $channeltype_list); /*发布文档的模型ID,用于是否显示文档模板列表*/ $js_allow_channel_arr = '['; foreach ($this->allowReleaseChannel as $key => $val) { if ($key > 0) { $js_allow_channel_arr .= ','; } $js_allow_channel_arr .= $val; } $js_allow_channel_arr = $js_allow_channel_arr.']'; $this->assign('js_allow_channel_arr', $js_allow_channel_arr); /*--end*/ // 所属栏目 $select_html = ''; $selected = 0; $arctype_max_level = intval(config('global.arctype_max_level')); $arctypeWhere = ['is_del'=>0]; $options = $this->arctypeLogic->arctype_list(0, $selected, false, $arctype_max_level - 1, $arctypeWhere); foreach ($options AS $var) { $select_html .= ''; } $this->assign('select_html',$select_html); /*模板列表*/ $templateList = $this->ajax_getTemplateList('add'); $this->assign('templateList', $templateList); /*--end*/ $dirpath = tpCache('seo.seo_html_arcdir'); $this->assign('dirpath', $dirpath); return $this->fetch(); } /** * 批量增加顶级栏目 */ private function batch_add_toptype($post = []) { $saveData = []; $dirnameArr = []; foreach ($post['toptype'] as $key => $val) { $typename = func_preg_replace([',',','], '', trim($val)); if (empty($typename)) continue; // 子栏目 if (!empty($post['sontype'][$key])) { $sontype = str_replace(',', ',', $post['sontype'][$key]); $post['sontype'][$key] = explode(',', $sontype); } // 目录名称 $dirname = $this->arctypeLogic->get_dirname($typename, '', 0, $dirnameArr); array_push($dirnameArr, $dirname); $dirpath = '/'.$dirname; $data = [ 'typename' => $typename, 'channeltype' => $post['current_channel'], 'current_channel' => $post['current_channel'], 'parent_id' => 0, 'dirname' => $dirname, 'dirpath' => $dirpath, 'grade' => 0, 'templist' => !empty($post['templist']) ? $post['templist'] : '', 'tempview' => !empty($post['tempview']) ? $post['tempview'] : '', 'is_hidden' => $post['is_hidden'], 'seo_description' => '', 'admin_id' => session('admin_info.admin_id'), 'lang' => $this->admin_lang, 'sort_order' => !empty($post['sort_order'][$key]) ? intval($post['sort_order'][$key]) : 100, 'add_time' => getTime(), 'update_time' => getTime(), ]; $saveData[] = $data; } if (!empty($saveData)) { $result = model('Arctype')->batchAddTopData($saveData, $post); if (!empty($result)) { $typenameArr = get_arr_column($result, 'typename'); $typenameStr = implode(',', $typenameArr); adminLog('批量增加栏目:'.$typenameStr); // 生成静态页面代码 $msg = '操作成功!'; $seo_pseudo = config('tpcache.seo_pseudo'); if (2 == $seo_pseudo) { $msg = '操作成功,请手工生成静态页面!'; } $this->success($msg, url('Arctype/index')); exit; } } $this->error("操作失败!"); } /** * 批量增加下级栏目 */ private function batch_add_subtype($post = []) { // 获取顶级模型ID $channeltype = Db::name('arctype')->where('id', $post['parent_id'])->getField('channeltype'); $saveData = []; $dirnameArr = []; foreach ($post['reltype'] as $key => $val) { $typename = func_preg_replace([',',','], '', trim($val)); if (empty($typename)) continue; // 目录名称 $dirname = $this->arctypeLogic->get_dirname($typename, '', 0, $dirnameArr); array_push($dirnameArr, $dirname); $dirpath = $post['dirpath'].'/'.$dirname; $data = [ 'typename' => $typename, 'channeltype' => $channeltype, 'current_channel' => $post['current_channel'], 'parent_id' => intval($post['parent_id']), 'dirname' => $dirname, 'dirpath' => $dirpath, 'grade' => intval($post['grade']), 'templist' => !empty($post['templist']) ? $post['templist'] : '', 'tempview' => !empty($post['tempview']) ? $post['tempview'] : '', 'is_hidden' => $post['is_hidden'], 'seo_description' => '', 'admin_id' => session('admin_info.admin_id'), 'lang' => $this->admin_lang, 'sort_order' => !empty($post['sort_order_1'][$key]) ? intval($post['sort_order_1'][$key]) : 100, 'add_time' => getTime(), 'update_time' => getTime(), ]; $saveData[] = $data; } if (!empty($saveData)) { $result = model('Arctype')->batchAddSubData($saveData); if (!empty($result)) { $typenameArr = get_arr_column($result, 'typename'); $typenameStr = implode(',', $typenameArr); adminLog('批量增加栏目:'.$typenameStr); // 生成静态页面代码 $msg = '操作成功!'; $seo_pseudo = config('tpcache.seo_pseudo'); if (2 == $seo_pseudo) { $msg = '操作成功,请手工生成静态页面!'; } $this->success($msg, url('Arctype/index')); exit; } } $this->error("操作失败!"); } }