@@ -17,6 +17,7 @@ import (
17
17
"github.com/polaris1119/goutils"
18
18
"github.com/polaris1119/logger"
19
19
20
+ "html/template"
20
21
. "http"
21
22
"model"
22
23
)
@@ -45,73 +46,53 @@ func (self ArticleController) RegisterRoute(g *echo.Group) {
45
46
func (ArticleController ) ReadList (ctx echo.Context ) error {
46
47
limit := 20
47
48
48
- lastId := goutils .MustInt (ctx .QueryParam ("lastid" ))
49
- articles := logic .DefaultArticle .FindBy (ctx , limit + 5 , lastId )
49
+ curPage := goutils .MustInt (ctx .QueryParam ("p" ), 1 )
50
+ paginator := logic .NewPaginator (curPage )
51
+ paginator .SetPerPage (limit )
52
+
53
+ // TODO: 参考的 topics 的处理方式,但是感觉不应该这样做
54
+ topArticles := logic .DefaultArticle .FindAll (ctx , paginator , "id DESC" , "top=1" )
55
+ unTopArticles := logic .DefaultArticle .FindAll (ctx , paginator , "id DESC" , "top!=1" )
56
+ articles := append (topArticles , unTopArticles ... )
50
57
if articles == nil {
51
58
logger .Errorln ("article controller: find article error" )
52
59
return ctx .Redirect (http .StatusSeeOther , "/articles" )
53
60
}
54
61
55
62
num := len (articles )
56
63
if num == 0 {
57
- if lastId == 0 {
64
+ if curPage == 1 {
58
65
return render (ctx , "articles/list.html" , map [string ]interface {}{"articles" : articles , "activeArticles" : "active" })
59
66
}
60
67
return ctx .Redirect (http .StatusSeeOther , "/articles" )
61
68
}
62
69
63
- // 旧的分页
64
- var (
65
- hasPrev , hasNext bool
66
- prevId , nextId int
67
- )
70
+ total := logic .DefaultArticle .Count (ctx , "" )
71
+ pageHtml := paginator .SetTotal (total ).GetPageHtml (ctx .Request ().URL ().Path ())
72
+ pageInfo := template .HTML (pageHtml )
68
73
69
- if lastId != 0 {
70
- prevId = lastId
74
+ // 获取当前用户喜欢对象信息
75
+ me , ok := ctx .Get ("user" ).(* model.Me )
76
+ var topLikeFlags map [int ]int
77
+ var unTopLikeFlags map [int ]int
78
+ likeFlags := map [int ]int {}
71
79
72
- firstNoTopId := articles [0 ].Id
73
- for i := 0 ; i < num ; i ++ {
74
- if articles [i ].Top != 1 {
75
- firstNoTopId = articles [i ].Id
76
- break
80
+ if ok {
81
+ topArticlesNum := len (topArticles )
82
+ if topArticlesNum > 0 {
83
+ topLikeFlags , _ = logic .DefaultLike .FindUserLikeObjects (ctx , me .Uid , model .TypeArticle , topArticles [0 ].Id , topArticles [topArticlesNum - 1 ].Id )
84
+ for k , v := range topLikeFlags {
85
+ likeFlags [k ] = v
77
86
}
78
87
}
79
- // 避免因为文章下线,导致判断错误(所以 > 5)
80
- if prevId - firstNoTopId > 5 {
81
- hasPrev = false
82
- } else {
83
- prevId += limit
84
- hasPrev = true
85
- }
86
- }
87
88
88
- if num > limit {
89
- hasNext = true
90
- articles = articles [:limit ]
91
- nextId = articles [limit - 1 ].Id
92
- } else {
93
- nextId = articles [num - 1 ].Id
94
- }
95
-
96
- pageInfo := map [string ]interface {}{
97
- "has_prev" : hasPrev ,
98
- "prev_id" : prevId ,
99
- "has_next" : hasNext ,
100
- "next_id" : nextId ,
101
- }
102
-
103
- // 新分页
104
- //curPage := goutils.MustInt(ctx.QueryParam("p"), 1)
105
- //paginator := logic.NewPaginator(curPage)
106
- //total := logic.DefaultArticle.Count(ctx, "")
107
- //pageHtml := paginator.SetTotal(total).GetPageHtml(ctx.Request().URL().Path())
108
- //pageInfo := template.HTML(pageHtml)
109
-
110
- // 获取当前用户喜欢对象信息
111
- me , ok := ctx .Get ("user" ).(* model.Me )
112
- var likeFlags map [int ]int
113
- if ok {
114
- likeFlags , _ = logic .DefaultLike .FindUserLikeObjects (ctx , me .Uid , model .TypeArticle , articles [0 ].Id , nextId )
89
+ unTopArticlesNum := len (unTopArticles )
90
+ if unTopArticlesNum > 0 {
91
+ unTopLikeFlags , _ = logic .DefaultLike .FindUserLikeObjects (ctx , me .Uid , model .TypeArticle , unTopArticles [0 ].Id , unTopArticles [unTopArticlesNum - 1 ].Id )
92
+ for k , v := range unTopLikeFlags {
93
+ likeFlags [k ] = v
94
+ }
95
+ }
115
96
}
116
97
117
98
return render (ctx , "articles/list.html" , map [string ]interface {}{"articles" : articles , "activeArticles" : "active" , "page" : pageInfo , "likeflags" : likeFlags })
0 commit comments