Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 868ffbd

Browse files
committed
评论分页
1 parent b0415aa commit 868ffbd

File tree

7 files changed

+100
-41
lines changed

7 files changed

+100
-41
lines changed

src/http/controller/comment.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,24 +91,36 @@ func (CommentController) Modify(ctx echo.Context) error {
9191
func (CommentController) CommentList(ctx echo.Context) error {
9292
objid := goutils.MustInt(ctx.QueryParam("objid"))
9393
objtype := goutils.MustInt(ctx.QueryParam("objtype"))
94+
p := goutils.MustInt(ctx.QueryParam("p"))
9495

95-
commentList, err := logic.DefaultComment.FindObjectComments(ctx, objid, objtype)
96+
commentList, replyComments, pageNum, err := logic.DefaultComment.FindObjectComments(ctx, objid, objtype, p)
9697
if err != nil {
9798
return fail(ctx, 1, "服务器内部错误")
9899
}
99100

100101
uids := slices.StructsIntSlice(commentList, "Uid")
102+
if len(replyComments) > 0 {
103+
replyUids := slices.StructsIntSlice(replyComments, "Uid")
104+
uids = append(uids, replyUids...)
105+
}
101106
users := logic.DefaultUser.FindUserInfos(ctx, uids)
102107

103108
result := map[string]interface{}{
104109
"comments": commentList,
110+
"page_num": pageNum,
105111
}
106112

107113
// json encode 不支持 map[int]...
108114
for uid, user := range users {
109115
result[strconv.Itoa(uid)] = user
110116
}
111117

118+
replyMap := make(map[string]interface{})
119+
for _, comment := range replyComments {
120+
replyMap[strconv.Itoa(comment.Floor)] = comment
121+
}
122+
result["reply_comments"] = replyMap
123+
112124
return success(ctx, result)
113125
}
114126

src/logic/comment.go

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ package logic
99
import (
1010
"fmt"
1111
"html/template"
12+
"math"
1213
"model"
1314
"net/url"
1415
"regexp"
@@ -63,19 +64,43 @@ func (self CommentLogic) FindObjComments(ctx context.Context, objid, objtype int
6364
return
6465
}
6566

67+
const CommentPerNum = 5
68+
6669
// FindObjectComments 获得某个对象的所有评论(新版)
67-
// TODO:分页暂不做
68-
func (self CommentLogic) FindObjectComments(ctx context.Context, objid, objtype int) (commentList []*model.Comment, err error) {
70+
func (self CommentLogic) FindObjectComments(ctx context.Context, objid, objtype, p int) (commentList []*model.Comment, replyComments []*model.Comment, pageNum int, err error) {
6971
objLog := GetLogger(ctx)
7072

73+
total, err := MasterDB.Where("objid=? AND objtype=?", objid, objtype).Count(new(model.Comment))
74+
if err != nil {
75+
objLog.Errorln("comment logic FindObjectComments count Error:", err)
76+
return
77+
}
78+
79+
pageNum = int(math.Ceil(float64(total) / CommentPerNum))
80+
if p == 0 {
81+
p = pageNum
82+
}
83+
7184
commentList = make([]*model.Comment, 0)
72-
err = MasterDB.Where("objid=? AND objtype=?", objid, objtype).Asc("cid").Find(&commentList)
85+
err = MasterDB.Where("objid=? AND objtype=?", objid, objtype).Asc("cid").
86+
Limit(CommentPerNum, (p-1)*CommentPerNum).
87+
Find(&commentList)
7388
if err != nil {
7489
objLog.Errorln("comment logic FindObjectComments Error:", err)
7590
}
7691

92+
floors := make([]interface{}, 0, len(commentList))
7793
for _, comment := range commentList {
7894
self.decodeCmtContentForShow(ctx, comment, true)
95+
96+
if comment.ReplyFloor > 0 {
97+
floors = append(floors, comment.ReplyFloor)
98+
}
99+
}
100+
101+
if len(floors) > 0 {
102+
replyComments = make([]*model.Comment, 0)
103+
err = MasterDB.Where("objid=? AND objtype=?", objid, objtype).In("floor", floors...).Find(&replyComments)
79104
}
80105

81106
return

static/dist/js/sg_base.js

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -768,7 +768,7 @@ jQuery(document).ready(function(){
768768
// 编辑 tab
769769
$('.page').on('click', '.comment-edit-tab', function(evt){
770770
evt.preventDefault();
771-
771+
772772
var $this = $(this);
773773
var $tabMenu = $this.parent()
774774
var commentGroup = $tabMenu.data('comment-group')
@@ -840,7 +840,7 @@ jQuery(document).ready(function(){
840840
toggleCommentShowOrEdit(floor, false)
841841

842842
var $uploadBtn = $('.upload-img[data-floor="' + floor + '"]')
843-
843+
844844
// 复制上传
845845
// 防止重复上传
846846
var pasteUpload = $textarea.data('paste-uploader')
@@ -876,7 +876,7 @@ jQuery(document).ready(function(){
876876
var $editWrapper = $markdown.children('.edit-wrapper')
877877
var $textarea = $editWrapper.find('textarea')
878878
var $content = $markdown.children('.content')
879-
var content = $textarea.val()
879+
var content = $textarea.val()
880880
var cid = $submitBtn.data("cid")
881881

882882
editComment($submitBtn, cid, content, function() {
@@ -885,7 +885,7 @@ jQuery(document).ready(function(){
885885
toggleCommentShowOrEdit(floor, true)
886886
})
887887
})
888-
888+
889889
// 点击回复某人
890890
$('#replies').on('click', '.btn-reply', function(evt) {
891891
evt.preventDefault();
@@ -929,15 +929,16 @@ jQuery(document).ready(function(){
929929
window.loadComments = function() {
930930
var objid = $('.comment-list').data('objid'),
931931
objtype = $('.comment-list').data('objtype');
932-
932+
933933
var params = {
934934
'objid': objid,
935935
'objtype': objtype
936936
};
937937
$.getJSON('/object/comments', params, function(data){
938938
if (data.ok) {
939939
data = data.data;
940-
var comments = data.comments;
940+
var comments = data.comments,
941+
replyComments = data.reply_comments;
941942

942943
var content = '';
943944
for(var i in comments) {
@@ -965,7 +966,7 @@ jQuery(document).ready(function(){
965966
}
966967

967968
if (comment.reply_floor > 0) {
968-
var replyComment = comments[comment.reply_floor-1]
969+
var replyComment = replyComments[comment.reply_floor]
969970
comment.reply_user = data[replyComment.uid];
970971
comment.reply_content = replyComment.content;
971972
}
@@ -1037,7 +1038,7 @@ jQuery(document).ready(function(){
10371038

10381039
var editComment = function(thiss, cid, content, callback) {
10391040
thiss.text("稍等").addClass("disabled").attr({"title":'稍等',"disabled":"disabled"});
1040-
1041+
10411042
$.ajax({
10421043
type:"post",
10431044
url: '/object/comments/' + cid,
@@ -1067,7 +1068,7 @@ jQuery(document).ready(function(){
10671068
objtype = $('.comment-list').data('objtype');
10681069

10691070
var usernames = SG.analyzeAt(content);
1070-
1071+
10711072
$.ajax({
10721073
type:"post",
10731074
url: '/comment/'+objid,
@@ -1084,7 +1085,7 @@ jQuery(document).ready(function(){
10841085
var $pageComment = $('.comment-list'),
10851086
meUid = $('[name="me-uid"]').val(),
10861087
user = {};
1087-
1088+
10881089
user.username = $pageComment.data('username'),
10891090
user.uid = $pageComment.data('uid'),
10901091
user.avatar = $pageComment.data('avatar'),
@@ -1109,14 +1110,14 @@ jQuery(document).ready(function(){
11091110

11101111
// emoji 表情解析
11111112
emojify.run($('.comment-list .words .reply:last').get(0));
1112-
1113+
11131114
// 注册@
11141115
SG.registerAtEvent(true, true, $('.page-comment textarea'));
11151116

11161117
cmtNum++;
11171118

11181119
$cmtNumObj.text(cmtNum);
1119-
1120+
11201121
setTimeout(function(){
11211122
$('.comment-list .words .reply').removeClass('light');
11221123
}, 2000);
@@ -1134,4 +1135,4 @@ jQuery(document).ready(function(){
11341135
});
11351136
}
11361137
});
1137-
}).call(this);
1138+
}).call(this);

static/dist/js/sg_base.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

static/js/base/comment.js

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
// 编辑 tab
3333
$('.page').on('click', '.comment-edit-tab', function(evt){
3434
evt.preventDefault();
35-
35+
3636
var $this = $(this);
3737
var $tabMenu = $this.parent()
3838
var commentGroup = $tabMenu.data('comment-group')
@@ -104,7 +104,7 @@
104104
toggleCommentShowOrEdit(floor, false)
105105

106106
var $uploadBtn = $('.upload-img[data-floor="' + floor + '"]')
107-
107+
108108
// 复制上传
109109
// 防止重复上传
110110
var pasteUpload = $textarea.data('paste-uploader')
@@ -140,7 +140,7 @@
140140
var $editWrapper = $markdown.children('.edit-wrapper')
141141
var $textarea = $editWrapper.find('textarea')
142142
var $content = $markdown.children('.content')
143-
var content = $textarea.val()
143+
var content = $textarea.val()
144144
var cid = $submitBtn.data("cid")
145145

146146
editComment($submitBtn, cid, content, function() {
@@ -149,7 +149,7 @@
149149
toggleCommentShowOrEdit(floor, true)
150150
})
151151
})
152-
152+
153153
// 点击回复某人
154154
$('#replies').on('click', '.btn-reply', function(evt) {
155155
evt.preventDefault();
@@ -193,15 +193,16 @@
193193
window.loadComments = function() {
194194
var objid = $('.comment-list').data('objid'),
195195
objtype = $('.comment-list').data('objtype');
196-
196+
197197
var params = {
198198
'objid': objid,
199199
'objtype': objtype
200200
};
201201
$.getJSON('/object/comments', params, function(data){
202202
if (data.ok) {
203203
data = data.data;
204-
var comments = data.comments;
204+
var comments = data.comments,
205+
replyComments = data.reply_comments;
205206

206207
var content = '';
207208
for(var i in comments) {
@@ -229,7 +230,7 @@
229230
}
230231

231232
if (comment.reply_floor > 0) {
232-
var replyComment = comments[comment.reply_floor-1]
233+
var replyComment = replyComments[comment.reply_floor]
233234
comment.reply_user = data[replyComment.uid];
234235
comment.reply_content = replyComment.content;
235236
}
@@ -301,7 +302,7 @@
301302

302303
var editComment = function(thiss, cid, content, callback) {
303304
thiss.text("稍等").addClass("disabled").attr({"title":'稍等',"disabled":"disabled"});
304-
305+
305306
$.ajax({
306307
type:"post",
307308
url: '/object/comments/' + cid,
@@ -331,7 +332,7 @@
331332
objtype = $('.comment-list').data('objtype');
332333

333334
var usernames = SG.analyzeAt(content);
334-
335+
335336
$.ajax({
336337
type:"post",
337338
url: '/comment/'+objid,
@@ -348,7 +349,7 @@
348349
var $pageComment = $('.comment-list'),
349350
meUid = $('[name="me-uid"]').val(),
350351
user = {};
351-
352+
352353
user.username = $pageComment.data('username'),
353354
user.uid = $pageComment.data('uid'),
354355
user.avatar = $pageComment.data('avatar'),
@@ -373,14 +374,14 @@
373374

374375
// emoji 表情解析
375376
emojify.run($('.comment-list .words .reply:last').get(0));
376-
377+
377378
// 注册@
378379
SG.registerAtEvent(true, true, $('.page-comment textarea'));
379380

380381
cmtNum++;
381382

382383
$cmtNumObj.text(cmtNum);
383-
384+
384385
setTimeout(function(){
385386
$('.comment-list .words .reply').removeClass('light');
386387
}, 2000);
@@ -398,4 +399,4 @@
398399
});
399400
}
400401
});
401-
}).call(this);
402+
}).call(this);

template/common/layout.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@
240240
</script>
241241

242242
<script src="{{.static_domain}}/static/dist/js/sg_libs.min.js"></script>
243-
<script src="{{.static_domain}}/static/dist/js/sg_base.min.js?v=0.4"></script>
243+
<script src="{{.static_domain}}/static/dist/js/sg_base.min.js?v=0.6"></script>
244244

245245
{{template "js" .}}
246246

0 commit comments

Comments
 (0)