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
+
+{{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}}{{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}}{{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
}