From aee4194c71dd98a7a84da96810a060f716d1ea57 Mon Sep 17 00:00:00 2001 From: "henry.chen" Date: Mon, 21 Jul 2025 20:07:26 +0800 Subject: [PATCH] fix: custom page support embed --- cmd/eiblog/etc/app.yml | 5 +++ cmd/eiblog/etc/page/custom2.html | 11 +++++ cmd/eiblog/etc/template/homeLayout.html | 2 +- cmd/eiblog/handler/internal/internal.go | 7 +++- cmd/eiblog/handler/{page => pages}/be.go | 2 +- cmd/eiblog/handler/{page => pages}/fe.go | 42 ++++++++++++++++++- .../handler/{page/page.go => pages/pages.go} | 7 +++- cmd/eiblog/main.go | 9 ++-- pkg/config/enums.go | 2 + 9 files changed, 77 insertions(+), 10 deletions(-) create mode 100644 cmd/eiblog/etc/page/custom2.html rename cmd/eiblog/handler/{page => pages}/be.go (99%) rename cmd/eiblog/handler/{page => pages}/fe.go (93%) rename cmd/eiblog/handler/{page/page.go => pages/pages.go} (88%) diff --git a/cmd/eiblog/etc/app.yml b/cmd/eiblog/etc/app.yml index f966566..b928b23 100644 --- a/cmd/eiblog/etc/app.yml +++ b/cmd/eiblog/etc/app.yml @@ -16,6 +16,11 @@ pages: - name: 自定义页面 path: /page/custom.html showinnav: true + isembed: false + - name: 自定义页面2 + path: /page/custom2.html + showinnav: true + isembed: true general: # 常规配置 pagenum: 10 # 首页展示文章数量 pagesize: 20 # 管理界面 diff --git a/cmd/eiblog/etc/page/custom2.html b/cmd/eiblog/etc/page/custom2.html new file mode 100644 index 0000000..c827df2 --- /dev/null +++ b/cmd/eiblog/etc/page/custom2.html @@ -0,0 +1,11 @@ +{{define "custom2.html"}} +Custom Page +
+
+

Custom Page

+
+

Custom Page

+
+
+
+{{end}} \ No newline at end of file diff --git a/cmd/eiblog/etc/template/homeLayout.html b/cmd/eiblog/etc/template/homeLayout.html index 9c0f04a..7413532 100644 --- a/cmd/eiblog/etc/template/homeLayout.html +++ b/cmd/eiblog/etc/template/homeLayout.html @@ -1 +1 @@ -{{.Title}}{{.AdSense}}{{if .Version}}{{end}}{{if .Version}}{{else}}{{end}}
{{.LayoutContent}}
{{if .Version}}{{else}}{{end}}{{if .Version}}{{else}}{{end}}{{if .Version}}{{else}}{{end}}{{if .Version}}{{else}}{{end}} +{{.Title}}{{.AdSense}}{{if .Version}}{{end}}{{if .Version}}{{else}}{{end}}
{{.LayoutContent}}
{{if .Version}}{{else}}{{end}}{{if .Version}}{{else}}{{end}}{{if .Version}}{{else}}{{end}}{{if .Version}}{{else}}{{end}} diff --git a/cmd/eiblog/handler/internal/internal.go b/cmd/eiblog/handler/internal/internal.go index c9eec69..d282283 100644 --- a/cmd/eiblog/handler/internal/internal.go +++ b/cmd/eiblog/handler/internal/internal.go @@ -20,7 +20,7 @@ import ( var ( XMLTemplate *template.Template // template/xml模板 - HTMLTemplate *template.Template // website/html模板 + HTMLTemplate *template.Template // page/html | website/html模板 Store store.Store // 数据库存储 Ei *Cache // 博客数据缓存 @@ -49,6 +49,11 @@ func init() { // should not read dir & .DS_Store return strings.HasPrefix(fi.Name(), ".") }) + root = filepath.Join(config.EtcDir, "page") + pageFiles := tools.ReadDirFiles(root, func(fi fs.DirEntry) bool { + return !strings.HasSuffix(fi.Name(), ".html") + }) + files = append(files, pageFiles...) HTMLTemplate, err = template.New("eiblog").Funcs(tools.TplFuncMap).ParseFiles(files...) if err != nil { logrus.Fatal("init html template: ", err) diff --git a/cmd/eiblog/handler/page/be.go b/cmd/eiblog/handler/pages/be.go similarity index 99% rename from cmd/eiblog/handler/page/be.go rename to cmd/eiblog/handler/pages/be.go index 6fd6985..cdaecfe 100644 --- a/cmd/eiblog/handler/page/be.go +++ b/cmd/eiblog/handler/pages/be.go @@ -1,4 +1,4 @@ -package page +package pages import ( "bytes" diff --git a/cmd/eiblog/handler/page/fe.go b/cmd/eiblog/handler/pages/fe.go similarity index 93% rename from cmd/eiblog/handler/page/fe.go rename to cmd/eiblog/handler/pages/fe.go index dcf74b5..70cc59e 100644 --- a/cmd/eiblog/handler/page/fe.go +++ b/cmd/eiblog/handler/pages/fe.go @@ -1,4 +1,4 @@ -package page +package pages import ( "bytes" @@ -14,6 +14,7 @@ import ( "github.com/eiblog/eiblog/cmd/eiblog/config" "github.com/eiblog/eiblog/cmd/eiblog/handler/internal" + pconfig "github.com/eiblog/eiblog/pkg/config" "github.com/eiblog/eiblog/pkg/third/disqus" "github.com/eiblog/eiblog/tools" @@ -382,16 +383,53 @@ func handleBeaconPage(c *gin.Context) { c.Status(http.StatusNoContent) } +// handleCustomPage 自定义页面 +func handleCustomPage(c *gin.Context) { + path := c.Request.URL.Path + if !strings.HasSuffix(path, ".html") { + handleNotFound(c) + return + } + // find config + var page *pconfig.CustomPage + for _, p := range config.Conf.Pages { + if p.Path == path { + page = &p + break + } + } + if page == nil { + handleNotFound(c) + return + } + var params gin.H + if page.IsEmbed { + params = baseFEParams(c) + params["Path"] = c.Request.URL.Path + params["Title"] = page.Name + " | " + internal.Ei.Blogger.SubTitle + } + // serve custom page + name := c.Param("path") + renderHTMLHomeLayout(c, name, params) +} + // renderHTMLHomeLayout homelayout html func renderHTMLHomeLayout(c *gin.Context, name string, data gin.H) { c.Header("Content-Type", "text/html; charset=utf-8") // special page - if name == "disqus.html" { + switch { + case name == "disqus.html": err := internal.HTMLTemplate.ExecuteTemplate(c.Writer, name, data) if err != nil { panic(err) } return + case data == nil: + err := internal.HTMLTemplate.ExecuteTemplate(c.Writer, name, nil) + if err != nil { + panic(err) + } + return } buf := bytes.Buffer{} err := internal.HTMLTemplate.ExecuteTemplate(&buf, name, data) diff --git a/cmd/eiblog/handler/page/page.go b/cmd/eiblog/handler/pages/pages.go similarity index 88% rename from cmd/eiblog/handler/page/page.go rename to cmd/eiblog/handler/pages/pages.go index a443177..db915cf 100644 --- a/cmd/eiblog/handler/page/page.go +++ b/cmd/eiblog/handler/pages/pages.go @@ -1,9 +1,14 @@ -package page +package pages import ( "github.com/gin-gonic/gin" ) +// RegisterRoutesCustomPages 注册自定义页面 +func RegisterRoutesCustomPages(e *gin.Engine) { + e.GET("/page/:path", handleCustomPage) +} + // RegisterRoutes register routes func RegisterRoutes(e *gin.Engine) { e.NoRoute(handleNotFound) diff --git a/cmd/eiblog/main.go b/cmd/eiblog/main.go index 2530336..c7289ff 100644 --- a/cmd/eiblog/main.go +++ b/cmd/eiblog/main.go @@ -7,7 +7,7 @@ import ( "github.com/eiblog/eiblog/cmd/eiblog/config" "github.com/eiblog/eiblog/cmd/eiblog/handler/admin" "github.com/eiblog/eiblog/cmd/eiblog/handler/file" - "github.com/eiblog/eiblog/cmd/eiblog/handler/page" + "github.com/eiblog/eiblog/cmd/eiblog/handler/pages" "github.com/eiblog/eiblog/cmd/eiblog/handler/swag" "github.com/eiblog/eiblog/pkg/middleware" @@ -44,20 +44,21 @@ func runHTTPServer(endRun chan error) { // static files, page e.Static("/static", filepath.Join(config.EtcDir, "assets")) + // custom pages - e.Static("/page", filepath.Join(config.EtcDir, "page")) + pages.RegisterRoutesCustomPages(e) // static files file.RegisterRoutes(e) // frontend pages - page.RegisterRoutes(e) + pages.RegisterRoutes(e) // unauthz api admin.RegisterRoutes(e) // admin router group := e.Group("/admin", middleware.AuthFilter) { - page.RegisterRoutesAuthz(group) + pages.RegisterRoutesAuthz(group) admin.RegisterRoutesAuthz(group) } diff --git a/pkg/config/enums.go b/pkg/config/enums.go index 6a31d0c..49398b5 100644 --- a/pkg/config/enums.go +++ b/pkg/config/enums.go @@ -127,4 +127,6 @@ type CustomPage struct { Path string // 是否显示在导航栏, 如 true ShowInNav bool + // 是否嵌入, 如 true + IsEmbed bool }