生成静态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
最后编辑:袁学飞 更新时间:2025-08-20 15:51