update
This commit is contained in:
@@ -5,8 +5,10 @@ import (
|
||||
"go_blog/controllers"
|
||||
"go_blog/models"
|
||||
"go_blog/serializers"
|
||||
"go_blog/themes" // <-- 确保导入 themes 包
|
||||
"log"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
@@ -19,32 +21,87 @@ func RegisterRoutes(r *gin.Engine) {
|
||||
r.GET("/events", esSSE)
|
||||
|
||||
r.GET("/page", func(c *gin.Context) {
|
||||
tm, exists := c.Get("ThemeManager")
|
||||
if !exists {
|
||||
c.String(http.StatusInternalServerError, "Theme manager not found")
|
||||
return
|
||||
}
|
||||
themeManager, ok := tm.(*themes.ThemeManager)
|
||||
if !ok {
|
||||
c.String(http.StatusInternalServerError, "Invalid theme manager type")
|
||||
return
|
||||
}
|
||||
|
||||
var items []models.Content
|
||||
var pager serializers.Pager
|
||||
pager.InitPager(c)
|
||||
pager.InitPager(c) // 这会从查询参数中读取 page 和 pageSize
|
||||
offset := (pager.Page - 1) * pager.PageSize
|
||||
if dbInterface, ok := c.Get("DB"); ok {
|
||||
if db, ok := dbInterface.(*gorm.DB); ok {
|
||||
db.Select("*").Offset(offset).Limit(pager.PageSize).Find(&items, "type = ?", "post")
|
||||
} else {
|
||||
log.Println("无法将 DB 转换为 *gorm.DB 类型")
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "内部服务器错误"})
|
||||
return
|
||||
}
|
||||
} else {
|
||||
|
||||
dbInterface, dbOk := c.Get("DB")
|
||||
if !dbOk {
|
||||
log.Println("未找到键 'DB' 的上下文值")
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "内部服务器错误"})
|
||||
return
|
||||
}
|
||||
db, typeOk := dbInterface.(*gorm.DB)
|
||||
if !typeOk {
|
||||
log.Println("无法将 DB 转换为 *gorm.DB 类型")
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "内部服务器错误"})
|
||||
return
|
||||
}
|
||||
|
||||
c.HTML(http.StatusOK, "index.tmpl", gin.H{
|
||||
db.Select("*").Offset(offset).Limit(pager.PageSize).Find(&items, "type = ?", "post")
|
||||
var totalCount int64
|
||||
db.Model(&models.Content{}).Where("type = ?", "post").Count(&totalCount)
|
||||
pager.Total = int(totalCount) // 确保 Pager 结构体中的 Total 类型匹配
|
||||
|
||||
tpl := themeManager.GetTemplate("index") // 假设分页列表也使用 index 模板
|
||||
if tpl == nil {
|
||||
c.String(http.StatusInternalServerError, "Template 'index' not found in current theme: "+themeManager.CurrentTheme())
|
||||
return
|
||||
}
|
||||
|
||||
c.Status(http.StatusOK)
|
||||
c.Header("Content-Type", "text/html; charset=utf-8")
|
||||
err := tpl.Execute(c.Writer, gin.H{
|
||||
"Items": items,
|
||||
"Pager": pager,
|
||||
"Title": "文章列表",
|
||||
"Pager": pager, // 确保你的 index.tmpl 支持 Pager 结构
|
||||
"Title": "文章列表 - 第 " + strconv.Itoa(pager.Page) + " 页",
|
||||
})
|
||||
if err != nil {
|
||||
c.String(http.StatusInternalServerError, "Error rendering template: "+err.Error())
|
||||
}
|
||||
})
|
||||
|
||||
r.GET("/createcontent", func(c *gin.Context) {
|
||||
c.HTML(http.StatusOK, "content.tmpl", nil)
|
||||
tm, exists := c.Get("ThemeManager")
|
||||
if !exists {
|
||||
c.String(http.StatusInternalServerError, "Theme manager not found")
|
||||
return
|
||||
}
|
||||
themeManager, ok := tm.(*themes.ThemeManager)
|
||||
if !ok {
|
||||
c.String(http.StatusInternalServerError, "Invalid theme manager type")
|
||||
return
|
||||
}
|
||||
|
||||
// 假设你的主题中有一个名为 "content" 的模板 (content.html 或 content.tmpl)
|
||||
// 注意:当前的 default 主题并没有 content.tmpl,你需要添加它。
|
||||
// 如果这个页面是后台页面,它可能不需要主题化,或者使用一个固定的后台模板。
|
||||
tpl := themeManager.GetTemplate("content")
|
||||
if tpl == nil {
|
||||
c.String(http.StatusInternalServerError, "Template 'content' not found in current theme: "+themeManager.CurrentTheme()+". Make sure 'content.html' or 'content.tmpl' exists.")
|
||||
return
|
||||
}
|
||||
|
||||
c.Status(http.StatusOK)
|
||||
c.Header("Content-Type", "text/html; charset=utf-8")
|
||||
err := tpl.Execute(c.Writer, gin.H{
|
||||
"Title": "创建新内容",
|
||||
})
|
||||
if err != nil {
|
||||
c.String(http.StatusInternalServerError, "Error rendering template: "+err.Error())
|
||||
}
|
||||
})
|
||||
|
||||
r.GET("/ws", controllers.WebSocketHandler)
|
||||
@@ -57,12 +114,12 @@ func RegisterRoutes(r *gin.Engine) {
|
||||
r.GET("/", controllers.Home)
|
||||
r.GET("/post/:id", controllers.ShowPost)
|
||||
|
||||
// // Admin panel
|
||||
// admin := r.Group("/admin", middleware.AuthRequired())
|
||||
// {
|
||||
// admin.GET("/themes", controllers.ListThemes)
|
||||
// admin.POST("/themes/switch", controllers.SwitchTheme)
|
||||
// }
|
||||
// Admin panel(取消注释并完善)
|
||||
admin := r.Group("/admin", jwt.AuthRequired()) // 新增中间件
|
||||
{
|
||||
admin.GET("/themes", controllers.ListThemes)
|
||||
admin.POST("/themes/switch", controllers.SwitchTheme)
|
||||
}
|
||||
|
||||
// Static files for themes
|
||||
r.StaticFS("/themes", http.Dir("web/themes"))
|
||||
|
||||
Reference in New Issue
Block a user