生成静态Html功能

需要修改 manifest/config/cms.yaml 中的配置, 以前的版本没有的话可以自己添加一下

# cms 请求路径
cmsPath: "/home"
# 模板路径
templatePath: "./resource/template/cms/theme"
# 是否生成html
generateHtml:
  # 是否启用生成静态HTML功能
  enable: false
  # 是否生成首页
  home: true
  # 是否生成分类页
  category: true
  # 是否生成分类分页页面
  categoryPaginated: true
  # 是否生成文章页
  article: true
  # 分批次生成文章页,每批次生成多少篇文章
  articleBatchNumber: 300
  # 生成静态HTML文件的保存路径,这个路径是相对于config.yaml中的server.serverRoot中的路径
  path: "/cms/staticHtmlCache"

默认生成的路径:resource/public/cms/staticHtmlCache 目录下面
开启生成html功能后,internal/app/home/router/cms_home.go 中会忽略创建前端/home 路由,并建立静态文件服务

package router

import (
    "context"
    "github.com/gogf/gf/v2/frame/g"
    "github.com/gogf/gf/v2/net/ghttp"
    "github.com/gogf/gf/v2/os/gfile"
    cmsService "github.com/tiger1103/gfast/v3/internal/app/cms/service"
    "github.com/tiger1103/gfast/v3/internal/app/home/controller"
)

func (router *Router) BindCmsHomeController(ctx context.Context, group *ghttp.RouterGroup) {
    // 增加html 后缀路由绑定
    group.Group("/", func(group *ghttp.RouterGroup) {
        cmsPath := g.Cfg("cms").MustGet(ctx, "cmsPath", "/home").String()
        cmsGeneratePath := g.Cfg("cms").MustGet(ctx, "generateHtml.path", "/cms/staticHtmlCache").String()
        serverRoot := g.Cfg().MustGet(ctx, "server.serverRoot", "/resource/public").String()
        // 判断是否生成静态页面
        isGenerateHtmlEnable := g.Cfg("cms").MustGet(ctx, "generateHtml.enable", false).Bool()
        // 判断CMS首页是否生成静态页面
        isGenerateHtmlHome := g.Cfg("cms").MustGet(ctx, "generateHtml.home", false).Bool()
        if isGenerateHtmlEnable && isGenerateHtmlHome {
            // 注册首页静态页面路径映射
            err := cmsService.CmsGenerateHtml().Home(ctx)
            if err != nil {
                panic(err)
            }
            g.Server().SetRewrite(cmsPath, cmsGeneratePath+"/index.html")
            g.Server().SetRewrite(cmsPath+"/index.html", cmsGeneratePath+"/index.html")
        } else {
            group.GET("/", controller.HomeIndexController.Index)
        }

        // 判断CMS分类是否生成静态页面
        isGenerateHtmlCategory := g.Cfg("cms").MustGet(ctx, "generateHtml.category", false).Bool()
        if isGenerateHtmlEnable && isGenerateHtmlCategory {
            gfile.Mkdir(serverRoot + cmsGeneratePath + "/channel")
            gfile.Mkdir(serverRoot + cmsGeneratePath + "/list")
            gfile.Mkdir(serverRoot + cmsGeneratePath + "/page")
            g.Server().AddStaticPath(cmsPath+"/channel", serverRoot+cmsGeneratePath+"/channel")
            g.Server().AddStaticPath(cmsPath+"/list", serverRoot+cmsGeneratePath+"/list")
            g.Server().AddStaticPath(cmsPath+"/page", serverRoot+cmsGeneratePath+"/page")
        } else {
            // 如果没有生成静态页面,则注册以下分类路由
            group.GET("/channel/{cateId}.html", controller.HomeIndexController.Channel)
            group.GET("/channel/{cateId}", controller.HomeIndexController.Channel)
            group.GET("/list/{cateId}.html", controller.HomeIndexController.List)
            group.GET("/list/{cateId}", controller.HomeIndexController.List)
            group.GET("/list/{cateId}/{pageNum}.html", controller.HomeIndexController.List)
            group.GET("/list/{cateId}/{pageNum}", controller.HomeIndexController.List)
            group.GET("/page/{cateId}.html", controller.HomeIndexController.Page)
            group.GET("/page/{cateId}", controller.HomeIndexController.Page)
        }
        // 判断文章是否生成静态页面
        isGenerateHtmlArticle := g.Cfg("cms").MustGet(ctx, "generateHtml.article", false).Bool()
        if isGenerateHtmlEnable && isGenerateHtmlArticle {
            // 注册文章静态页面路径映射
            gfile.Mkdir(serverRoot + cmsGeneratePath + "/show")
            g.Server().AddStaticPath(cmsPath+"/show", serverRoot+cmsGeneratePath+"/show")
        } else {
            group.GET("/show/{id}.html", controller.HomeIndexController.Show)
            group.GET("/show/{id}", controller.HomeIndexController.Show)
        }
        // 搜索页面不需要生成静态页面
        group.GET("/search.html", controller.HomeIndexController.Search)
        group.GET("/search", controller.HomeIndexController.Search)
    })
}
作者:袁学飞  创建时间:2025-07-23 17:43
最后编辑:袁学飞  更新时间:2025-08-20 15:51