package controller import ( "blog/internal/async" "blog/internal/model/AjaxResult" "blog/internal/model/blog" "blog/internal/service" "blog/third_party/database" "context" "html/template" "log" "time" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/mvc" "github.com/kataras/iris/v12/sessions" ) type ArticleController struct { Ctx iris.Context Session *sessions.Session } func (ctrl *ArticleController) Get() { ctrl.Ctx.View("/blog/article/index.html") } func (ctrl *ArticleController) GetLatest() { ctx := context.Background() var slices []blog.BlogArticle err := database.RedisTemplate.ZRevRange(ctx, "blog:article:latest", 0, 10).ScanSlice(&slices) if err != nil { log.Println(err) ctrl.Ctx.JSON(AjaxResult.Error("加载错误")) return } for i := range slices { article := &slices[i] id := article.Id viewRecord, _ := database.RedisTemplate.HGet(ctx, "blog:view:record", id).Int() article.ViewRecord = viewRecord } ctrl.Ctx.JSON(AjaxResult.Ok(slices)) } func (ctrl *ArticleController) ViewArticle() { articleId := ctrl.Ctx.Params().Get("id") article := service.ArticleService.GetBlogArticle(articleId) if article.Id == "" { ctrl.Ctx.View("404.html") return } xFrowardedFor := ctrl.Ctx.GetHeader("X-Forwarded-For") async.PublishViewRecord(async.ViewRecord{RelId: articleId, IpAddr: xFrowardedFor, ViewTime: time.Now().UnixMilli(), Title: article.Title}) content := service.ContentService.GetContentByCache(articleId) ctrl.Ctx.ViewData("article", article) ctrl.Ctx.ViewData("content", content) if article.ContentType == "markdown" { ctrl.Ctx.View("blog/article/article_md.html") return } ctrl.Ctx.ViewData("content", template.HTML(content)) ctrl.Ctx.View("blog/article/article_tinyMce.html") } func (ctrl *ArticleController) BeforeActivation(activation mvc.BeforeActivation) { // log.Println("before") activation.Handle("GET", "/view/{id}", "ViewArticle") } func (ctrl *ArticleController) AfterActivation(activation mvc.AfterActivation) { // log.Println("after") }