* Date: 2018-4-3 */ namespace app\admin\controller; use think\Db; use think\Page; use think\Cache; class LinksGroup extends Base { public function index() { $list = array(); $keywords = input('keywords/s'); $condition = array(); if (!empty($keywords)) { $condition['group_name'] = array('LIKE', "%{$keywords}%"); } $condition['lang'] = array('eq', $this->admin_lang); $linksgroupsM = Db::name('links_group'); $count = $linksgroupsM->where($condition)->count('id');// 查询满足要求的总记录数 $Page = $pager = new Page($count, config('paginate.list_rows'));// 实例化分页类 传入总记录数和每页显示的记录数 $list = $linksgroupsM->where($condition)->order('sort_order asc, id asc')->limit($Page->firstRow.','.$Page->listRows)->select(); $min_group_id = 0; foreach ($list as $key => $val) { if ($min_group_id > $val['id'] || empty($min_group_id)) { $min_group_id = $val['id']; } } $this->assign('min_group_id',$min_group_id); /*多语言模式下,分组ID显示主体语言的ID*/ $main_group_list = []; if ($this->admin_lang != $this->main_lang && empty($this->globalConfig['language_split'])) { $attr_values = get_arr_column($list, 'id'); $languageAttrRow = Db::name('language_attr')->field('attr_name,attr_value')->where([ 'attr_value' => ['IN', $attr_values], 'attr_group' => 'links_group', 'lang' => $this->admin_lang, ])->getAllWithIndex('attr_value'); $groupids = []; foreach ($languageAttrRow as $key => $val) { $gid_tmp = str_replace('linksgroup', '', $val['attr_name']); array_push($groupids, intval($gid_tmp)); } $main_GroupRow = Db::name('links_group')->field("id,CONCAT('linksgroup', id) AS attr_name") ->where([ 'id' => ['IN', $groupids], 'lang' => $this->main_lang, ])->getAllWithIndex('attr_name'); foreach ($list as $key => $val) { $key_tmp = !empty($languageAttrRow[$val['id']]['attr_name']) ? $languageAttrRow[$val['id']]['attr_name'] : ''; $main_group_list[$val['id']] = [ 'id' => !empty($main_GroupRow[$key_tmp]['id']) ? $main_GroupRow[$key_tmp]['id'] : 0, ]; } } $this->assign('main_group_list', $main_group_list); /*end*/ $show = $Page->show();// 分页显示输出 $this->assign('page',$show);// 赋值分页输出 $this->assign('list',$list);// 赋值数据集 $this->assign('pager',$pager);// 赋值分页对象 return $this->fetch(); } /** * 保存友情链接分组 */ public function linksgroup_save() { if (IS_AJAX_POST) { $post = input('post.'); if (empty($post['group_name'])) { $this->error('至少新增一个链接分组!'); } else { $is_empty = true; foreach ($post['group_name'] as $key => $val) { $val = trim($val); if (!empty($val)) { $is_empty = false; break; } } if (true === $is_empty) { $this->error('分组名称不能为空!'); } } // 数据拼装 $now_time = getTime(); $addData = $editData = []; foreach ($post['group_name'] as $key => $val) { $group_name = trim($val); if (!empty($group_name)) { if (empty($post['id'][$key])) { if ($this->admin_lang == $this->main_lang || !empty($this->globalConfig['language_split'])) { $addData[] = [ 'group_name' => $group_name, 'sort_order' => $post['sort_order'][$key] ? :100, 'lang' => $this->admin_lang, 'add_time' => $now_time, 'update_time' => $now_time, ]; } } else { $id = intval($post['id'][$key]); $editData[] = [ 'id' => $id, 'group_name' => $group_name, 'sort_order' => $post['sort_order'][$key] ? :100, 'lang' => $this->admin_lang, 'update_time' => $now_time, ]; } } } if (!empty($addData)) { $rdata = model('LinksGroup')->saveAll($addData); /*多语言*/ if (is_language()) { foreach ($rdata as $k1 => $v1) { $attr_data = $v1->getData(); // 同步分组ID到多语言的模板变量里,添加多语言分组位 $this->syn_add_language_linksgroup($attr_data['id']); } } /*end*/ } $r = true; if (!empty($editData)) { $r = model('LinksGroup')->saveAll($editData); } if ($r !== false) { Cache::clear('links'); Cache::clear('links_group'); adminLog('保存链接分组:'.implode(',', $post['group_name'])); $this->success('操作成功'); } } $this->error('操作失败'); } /** * 同步新增分组ID到多语言的模板变量里 */ private function syn_add_language_linksgroup($group_id) { /*单语言情况下不执行多语言代码*/ if (!is_language() || tpCache('language.language_split')) { return true; } /*--end*/ $attr_group = 'links_group'; $languageRow = Db::name('language')->field('mark')->order('id asc')->select(); if (!empty($languageRow) && $this->admin_lang == $this->main_lang) { // 当前语言是主体语言,即语言列表最早新增的语言 $links_group_db = Db::name('links_group'); $result = $links_group_db->find($group_id); $attr_name = 'linksgroup'.$group_id; $r = Db::name('language_attribute')->save([ 'attr_title' => $result['group_name'], 'attr_name' => $attr_name, 'attr_group' => $attr_group, 'add_time' => getTime(), 'update_time' => getTime(), ]); if (false !== $r) { $data = []; foreach ($languageRow as $key => $val) { /*同步新分组到其他语言分组列表*/ if ($val['mark'] != $this->admin_lang) { $addsaveData = $result; $addsaveData['lang'] = $val['mark']; $addsaveData['group_name'] = $val['mark'].$addsaveData['group_name']; unset($addsaveData['id']); $group_id = $links_group_db->insertGetId($addsaveData); } /*--end*/ /*所有语言绑定在主语言的ID容器里*/ $data[] = [ 'attr_name' => $attr_name, 'attr_value' => $group_id, 'lang' => $val['mark'], 'attr_group' => $attr_group, 'add_time' => getTime(), 'update_time' => getTime(), ]; /*--end*/ } if (!empty($data)) { model('LanguageAttr')->saveAll($data); } } } } /** * 删除友情链接分组 */ public function del() { if (is_language() && empty($this->globalConfig['language_split'])) { $this->language_access(); // 多语言功能操作权限 } $id_arr = input('del_id/a'); $id_arr = eyIntval($id_arr); if(IS_POST && !empty($id_arr)){ $linksGroupRow = Db::name('links_group')->where(['lang'=>$this->admin_lang])->order('id asc')->column('id'); if (!empty($linksGroupRow)) { if (1 < count($linksGroupRow)) { $firstRow = current($linksGroupRow); $min_group_id = empty($firstRow['id']) ? 0 : $firstRow['id']; if (in_array($min_group_id, $id_arr)) { $this->error('禁止删除默认分组'); } } else { $this->error('至少保留一个分组'); } } /*多语言*/ $attr_name_arr = []; foreach ($id_arr as $key => $val) { $attr_name_arr[] = 'linksgroup'.$val; } if (is_language() && empty($this->globalConfig['language_split'])) { $new_id_arr = Db::name('language_attr')->where([ 'attr_name' => ['IN', $attr_name_arr], 'attr_group' => 'links_group', ])->column('attr_value'); !empty($new_id_arr) && $id_arr = $new_id_arr; } /*--end*/ $group_name_list = Db::name('links_group')->where([ 'id' => ['IN', $id_arr], ])->column('group_name'); $r = Db::name('links_group')->where([ 'id' => ['IN', $id_arr], ])->delete(); if ($r !== false) { /*删除多语言友情链接分组关联绑定*/ if (!empty($attr_name_arr)) { if (get_admin_lang() == get_main_lang()) { Db::name('language_attribute')->where([ 'attr_name' => ['IN', $attr_name_arr], 'attr_group' => 'links_group', ])->delete(); } if (empty($this->globalConfig['language_split'])) { Db::name('language_attr')->where([ 'attr_name' => ['IN', $attr_name_arr], 'attr_group' => 'links_group', ])->delete(); } else { Db::name('language_attr')->where([ 'attr_value' => ['IN', $id_arr], 'attr_group' => 'links_group', ])->delete(); } } /*--end*/ Db::name('links')->where([ 'groupid' => ['IN', $id_arr], ])->delete(); Cache::clear('links'); Cache::clear('links_group'); adminLog('删除友情链接分组:'.implode(',', $group_name_list)); $this->success('删除成功'); } } $this->error('删除失败'); } }