mirror of
https://github.com/tiger1103/gfast.git
synced 2026-09-30 20:58:31 +00:00
176 lines
4.3 KiB
Go
176 lines
4.3 KiB
Go
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
|
|
}
|