| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- package cms_service
- import (
- "gfast/app/model/admin/cms_category"
- "gfast/app/model/admin/model_fields"
- "gfast/app/service/common/com_model_service"
- "gfast/library/utils"
- "github.com/gogf/gf/container/garray"
- "github.com/gogf/gf/errors/gerror"
- "github.com/gogf/gf/frame/g"
- "github.com/gogf/gf/net/ghttp"
- "github.com/gogf/gf/os/gfile"
- "github.com/gogf/gf/text/gstr"
- "github.com/gogf/gf/util/gconv"
- )
- //获取频道列表
- func GetMenuListChannel() (list []*cms_category.Entity, err error) {
- //获取频道列表
- listAll, err := GetMenuList()
- if err != nil {
- return
- }
- list = make([]*cms_category.Entity, 0, len(listAll))
- for _, v := range listAll {
- if v.Status == 1 && v.CateType == cms_category.ChannelCateType {
- list = append(list, v)
- }
- }
- return
- }
- //获取可发布文章栏目
- func GetPublishableMenuList(catId ...int) (list []*cms_category.Entity, err error) {
- menuList, err := GetMenuList()
- var catIdMap map[int]int
- if len(catId) > 0 {
- catIdMap = make(map[int]int, len(catId))
- for _, v := range catId {
- catIdMap[v] = v
- }
- }
- if err != nil {
- return
- }
- for _, menu := range menuList {
- if menu.CateType == cms_category.JumpCateType || menu.CateType == cms_category.SingleCateType {
- continue
- }
- if menu.Status == 1 {
- list = append(list, menu)
- }
- }
- return
- }
- //获取所有菜单列表
- func GetMenuList() (list []*cms_category.Entity, err error) {
- return cms_category.GetList()
- }
- //保存栏目操作
- func AddSave(req *cms_category.ReqAdd) (id int64, err error) {
- return cms_category.AddSave(req)
- }
- //修改栏目操作
- func EditSave(req *cms_category.ReqEdit) (id int64, err error) {
- return cms_category.EditSave(req)
- }
- //获取搜索栏目结果
- func GetMenuListSearch(req *cms_category.ReqSearchList) (menus []*cms_category.Entity, err error) {
- return cms_category.GetListSearch(req)
- }
- //根据栏目ID获取栏目信息
- func GetMenuInfoById(id int) (menu *cms_category.Entity, err error) {
- return cms_category.GetInfoById(id)
- }
- //通过栏目ID获取子级栏目ID
- func GetChildrenIds(ids []int) ([]int, error) {
- //获取所有栏目
- menus, err := GetMenuList()
- if err != nil {
- return nil, err
- }
- menuList := make(g.List, len(menus))
- for k, menu := range menus {
- menuList[k] = gconv.Map(menu)
- }
- for _, id := range ids {
- children := utils.FindSonByParentId(menuList, id, "parent_id", "id")
- for _, cid := range children {
- ids = append(ids, gconv.Int(cid["id"]))
- }
- }
- return ids, nil
- }
- //删除栏目
- func DeleteMenuByIds(ids []int) (err error) {
- ids, err = GetChildrenIds(ids)
- if err != nil {
- return
- }
- return cms_category.DeleteByIds(ids)
- }
- //获取栏目对应的模型字段规则
- func GetModelFieldsByCateIds(r *ghttp.Request, ids []int, newsId int64) (rules []*model_fields.FieldRule, err error) {
- var modelId uint
- modelId, err = GetModelIdByCateIds(ids)
- if err != nil {
- return
- }
- //获取模型字段信息
- rules, err = com_model_service.GetModelRuleByModelId(r, gconv.Int64(modelId), newsId)
- if err != nil {
- return
- }
- return
- }
- //通过栏目ids获取模型id
- func GetModelIdByCateIds(ids []int) (modelId uint, err error) {
- ids, err = GetChildrenIds(ids)
- if err != nil {
- return
- }
- idsArr := garray.NewIntArrayFrom(ids)
- menus, err := GetMenuList()
- if err != nil {
- return
- }
- for _, menu := range menus {
- if idsArr.Contains(gconv.Int(menu.Id)) {
- if modelId == 0 {
- modelId = menu.ModelId
- } else if modelId != menu.ModelId {
- err = gerror.New("所选多个栏目必须为同一模型。")
- return
- }
- }
- }
- //不存在管理的模型
- if modelId == 0 {
- err = gerror.New("未获取到对应模型信息")
- return
- }
- return
- }
- //获取分类模板
- func GetCmsTemplate() ([]string, []string) {
- pathArr := g.Cfg().GetArray("viewer.paths")
- var listTemplates []string
- var contentTemplates []string
- for _, p := range pathArr {
- path := gconv.String(p) + "/cms"
- if gfile.IsDir(path) {
- path = gfile.Abs(path)
- cmsPath, _ := gfile.ScanDirFile(path, "*", true)
- for _, cp := range cmsPath {
- if gstr.ContainsI(cp, "list") {
- listTemplates = append(listTemplates, gstr.TrimLeft(gstr.ReplaceByArray(cp, []string{path, "", "\\", "/"}), "/"))
- } else if gstr.ContainsI(cp, "content") {
- contentTemplates = append(contentTemplates, gstr.TrimLeft(gstr.ReplaceByArray(cp, []string{path, "", "\\", "/"}), "/"))
- }
- }
- }
- }
- return listTemplates, contentTemplates
- }
|