Sfoglia il codice sorgente

wip:移动端访问pc

wangkaiyue 1 anno fa
parent
commit
8ebe00e76e
4 ha cambiato i file con 61 aggiunte e 28 eliminazioni
  1. 15 17
      internal/controller/area.go
  2. 6 7
      internal/controller/detail.go
  3. 16 4
      utility/response.go
  4. 24 0
      utility/util.go

+ 15 - 17
internal/controller/area.go

@@ -12,12 +12,11 @@ import (
 
 // AreaIndexHandler 地区站首页
 func AreaIndexHandler(areaNode *service.AreaNode, r *ghttp.Request) {
-	utility.HtmlRender.Render(r, utility.GetCommonRenderPatch(r.Request.UserAgent(), "area_index.html"),
-		g.Map{
-			"Request":  r.Request,
-			"areaNode": areaNode,
-			//"tdk":      service.JySeoTdk.GetAreaIndexTdk(r.Context(), node.Name),
-		})
+	utility.HtmlRender.Render(r, "area_index.html", g.Map{
+		"Request":  r.Request,
+		"areaNode": areaNode,
+		//"tdk":      service.JySeoTdk.GetAreaIndexTdk(r.Context(), node.Name),
+	})
 }
 
 // CityListHandler 城市子站列表页面
@@ -38,7 +37,7 @@ func CityListHandler(areaNode *service.AreaNode, r *ghttp.Request) {
 		utility.HtmlRender.RenderError(r, fmt.Errorf("获取列表数据异常"))
 		return
 	}
-	utility.HtmlRender.Render(r, utility.GetCommonRenderPatch(r.Request.UserAgent(), "area_city_list.html"),
+	utility.HtmlRender.Render(r, "area_city_list.html",
 		g.Map{
 			"Request":  r.Request,
 			"pageNum":  pageNum,
@@ -67,15 +66,14 @@ func AreaClassListHandler(areaNode *service.AreaNode, r *ghttp.Request) {
 		utility.HtmlRender.RenderError(r, fmt.Errorf("获取列表数据异常"))
 		return
 	}
-	utility.HtmlRender.Render(r, utility.GetCommonRenderPatch(r.Request.UserAgent(), "area_class_list.html"),
-		g.Map{
-			"Request":   r.Request,
-			"pageNum":   pageNum,
-			"areaNode":  areaNode,
-			"classNode": classNode,
-			"list":      rData.List,
-			//"tdk":        service.JySeoTdk.GetAreaSTypeListTdk(r.Context(), sTypeNode.Code, areaNode.Name),
-			"pagination": utility.GetLetterPaging(pageNum, gconv.Int(rData.Total), fmt.Sprintf("/%s_%s", classNode.Code, "%d")),
-		},
+	utility.HtmlRender.Render(r, "area_class_list.html", g.Map{
+		"Request":   r.Request,
+		"pageNum":   pageNum,
+		"areaNode":  areaNode,
+		"classNode": classNode,
+		"list":      rData.List,
+		//"tdk":        service.JySeoTdk.GetAreaSTypeListTdk(r.Context(), sTypeNode.Code, areaNode.Name),
+		"pagination": utility.GetLetterPaging(pageNum, gconv.Int(rData.Total), fmt.Sprintf("/%s_%s", classNode.Code, "%d")),
+	},
 	)
 }

+ 6 - 7
internal/controller/detail.go

@@ -26,11 +26,10 @@ func BiddingDetail(r *ghttp.Request) {
 			areaNode = service.JyBxSeoAreaRoot.GetNodeByName(areaName)
 		}
 	}
-	utility.HtmlRender.Render(r, utility.GetCommonRenderPatch(r.Request.UserAgent(), "detail.html"),
-		g.Map{
-			"Request":  r.Request,
-			"areaNode": areaNode,
-			"detail":   detail,
-			//"tdk":      service.JySeoTdk.GetAreaIndexTdk(r.Context(), node.Name),
-		})
+	utility.HtmlRender.Render(r, "detail.html", g.Map{
+		"Request":  r.Request,
+		"areaNode": areaNode,
+		"detail":   detail,
+		//"tdk":      service.JySeoTdk.GetAreaIndexTdk(r.Context(), node.Name),
+	})
 }

+ 16 - 4
utility/response.go

@@ -2,6 +2,8 @@ package utility
 
 import (
 	"fmt"
+	"github.com/gogf/gf/v2/errors/gcode"
+	"github.com/gogf/gf/v2/errors/gerror"
 	"github.com/gogf/gf/v2/frame/g"
 	"github.com/gogf/gf/v2/net/ghttp"
 	"net/http"
@@ -19,14 +21,24 @@ var (
 )
 
 // Render 渲染html页面
-func (l *localHtmlRender) Render(r *ghttp.Request, filePath string, params ...Params) {
-	var usedParams Params
+func (l *localHtmlRender) Render(r *ghttp.Request, fileName string, params ...Params) {
+	var (
+		err        error
+		res        string
+		usedParams Params
+	)
 	if len(params) > 0 {
 		usedParams = params[0]
 	}
-	res, err := g.View().Parse(r.Context(), filePath, usedParams)
+	//当移动端未找到模版,渲染pc模版
+	for _, filePath := range GetCommonRenderCachePaths(r.Request.UserAgent(), fileName) {
+		res, err = g.View().Parse(r.Context(), filePath, usedParams)
+		if gerror.Code(err) != gcode.CodeInvalidParameter {
+			break
+		}
+	}
 	if err != nil {
-		g.Log().Error(r.Context(), "渲染%s页面异常 %v", filePath, err)
+		g.Log().Error(r.Context(), "渲染%s页面异常 %v", fileName, err)
 		l.RenderError(r, fmt.Errorf("页面异常"), params...)
 	} else {
 		r.Response.Write(res)

+ 24 - 0
utility/util.go

@@ -11,6 +11,7 @@ import (
 	"regexp"
 	"strconv"
 	"strings"
+	"sync"
 )
 
 // ConversionMoney 金额格式化
@@ -65,6 +66,29 @@ func IsMobile(agent string) bool {
 	return false
 }
 
+var getCacheRenderFilePaths = getRenderFilePaths()
+
+func GetCommonRenderCachePaths(agent, value string) []string {
+	return getCacheRenderFilePaths(IsMobile(agent), value)
+}
+
+func getRenderFilePaths() func(bool, string) []string {
+	cacheMap := map[string]map[bool][]string{}
+	lock := sync.Mutex{}
+	return func(isMobile bool, filename string) []string {
+		lock.Lock()
+		defer lock.Unlock()
+		if m, ok := cacheMap[filename]; ok && len(m) == 2 {
+			return m[isMobile]
+		}
+		cacheMap[filename] = map[bool][]string{
+			true:  {fmt.Sprintf("mobile/%s", filename), fmt.Sprintf("pc/%s", filename)},
+			false: {fmt.Sprintf("pc/%s", filename)},
+		}
+		return cacheMap[filename][isMobile]
+	}
+}
+
 func EncodeId(sid string) string {
 	if sid == "" || sid == "-" { //不存在的id为-
 		return ""