response.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package home
  2. import (
  3. "gfast/app/model/admin/cms_category"
  4. "gfast/app/model/admin/cms_category_news"
  5. "gfast/app/model/admin/cms_news"
  6. "gfast/app/service/admin/cms_service"
  7. "gfast/app/service/home/menu_service"
  8. "gfast/app/service/home/news_service"
  9. "gfast/library/response"
  10. "gfast/library/utils"
  11. "github.com/gogf/gf/container/gvar"
  12. "github.com/gogf/gf/frame/g"
  13. "github.com/gogf/gf/net/ghttp"
  14. "github.com/gogf/gf/os/gmutex"
  15. "github.com/gogf/gf/os/gview"
  16. "github.com/gogf/gf/util/gconv"
  17. )
  18. type Response struct {
  19. *response.Response
  20. }
  21. var (
  22. ResponseInstance = new(Response)
  23. mu = gmutex.New()
  24. )
  25. func WriteTpl(r *ghttp.Request, tpl string, params ...gview.Params) error {
  26. return ResponseInstance.WriteTpl(r, tpl, params...)
  27. }
  28. func (res *Response) WriteTpl(r *ghttp.Request, tpl string, params ...gview.Params) error {
  29. mu.Lock()
  30. defer mu.Unlock()
  31. v := g.View()
  32. v.SetPath("template/cms")
  33. //绑定模板中需要用到的方法
  34. v.BindFuncMap(g.Map{
  35. //获取导航菜单列表
  36. "GetNav": func(activeId uint64) string {
  37. nav, err := menu_service.GetNav(activeId)
  38. if err != nil {
  39. g.Log().Error(err)
  40. }
  41. return nav
  42. },
  43. //获取文章调用参数
  44. "GetNewsParams": func(args interface{}) *cms_news.ReqListSearchParams {
  45. params := new(cms_news.ReqListSearchParams)
  46. err := gconv.Struct(args, params)
  47. if err != nil {
  48. g.Log().Error(err)
  49. }
  50. return params
  51. },
  52. //设置文章参数
  53. "SetNewsParams": func(params g.Map, key string, value interface{}) g.Map {
  54. data := g.Map{}
  55. if params != nil {
  56. for k, v := range params {
  57. data[k] = v
  58. }
  59. }
  60. data[key] = value
  61. return data
  62. },
  63. //获取文章列表
  64. "GetNewsList": func(cateId int, pageSize int, attr ...*cms_news.ReqListSearchParams) []*cms_news.NewsList {
  65. list, err := news_service.GetNewsList(cateId, pageSize, attr...)
  66. if err != nil {
  67. g.Log().Error(err)
  68. }
  69. return list
  70. },
  71. //
  72. "GetVarsValue": func(val *gvar.Var) map[string]string {
  73. return val.MapStrStr()
  74. },
  75. //获取栏目面包树
  76. "GetMenuBreadTree": func(menu *cms_category.Entity) g.List {
  77. // 获取所有栏目
  78. menus, err := cms_service.GetMenuList()
  79. if err != nil {
  80. g.Log().Error(err)
  81. }
  82. menuList := make(g.List, len(menus))
  83. for k, m := range menus {
  84. menuList[k] = gconv.Map(m)
  85. }
  86. breadMenus := utils.FindParentBySonPid(menuList, gconv.Int(menu.Id), "filter", "parent_id", nil, "id")
  87. //获取最顶级
  88. var topMenus g.Map
  89. if menu != nil {
  90. topMenus = utils.FindTopParent(menuList, gconv.Int64(menu.Id), "parent_id", "id")
  91. }
  92. breadMenus = utils.ParentSonSort(breadMenus, topMenus["parent_id"], 1, "parent_id")
  93. return breadMenus
  94. },
  95. "getArticleCateId": func(cateList *gvar.Var) int {
  96. val := gconv.Map(cateList.Val())
  97. for index, _ := range val {
  98. return gconv.Int(index)
  99. }
  100. return 0
  101. },
  102. "isSon": func(id, menus interface{}) bool {
  103. i := gconv.Int(id)
  104. m := gconv.SliceMap(menus)
  105. for _, v := range m {
  106. if gconv.Int(v["parent_id"]) == i {
  107. return true
  108. }
  109. }
  110. return false
  111. },
  112. "getThumb": func(more interface{}) string {
  113. m := gconv.Map(more)
  114. m1 := gconv.String(m["thumb"])
  115. return m1
  116. },
  117. // 通过文章id获取所属栏目id
  118. "getCateIdByArticleId": func(articleId interface{}) int {
  119. aid := gconv.Uint64(articleId)
  120. cateIds, _ := cms_category_news.GetCheckedCategoryIdByNewsId(aid)
  121. return cateIds[0]
  122. },
  123. // 取出视频格式
  124. "getVideoFormat": func(videoName interface{}) string {
  125. data := []byte(gconv.String(videoName))
  126. var data2 []byte
  127. for i := len(data) - 3; i < len(data); i++ {
  128. data2 = append(data2, data[i])
  129. }
  130. videoFormat := string(data2)
  131. return videoFormat
  132. },
  133. })
  134. //文章参数
  135. params = append(params, g.Map{"newsParams": g.Map{}})
  136. return res.Response.WriteTpl(r, tpl, v, params...)
  137. }