diff --git a/src/main/java/cc/ryanc/halo/model/dto/ListPage.java b/src/main/java/cc/ryanc/halo/model/dto/ListPage.java new file mode 100644 index 000000000..9f89bb1b0 --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/dto/ListPage.java @@ -0,0 +1,128 @@ +package cc.ryanc.halo.model.dto; + +import java.util.Collections; +import java.util.List; + +/** + *
+ *     List分页
+ * 
+ * + * @author : RYAN0UP + * @date : 2018/8/27 + */ +public class ListPage { + + /** + * 原集合 + */ + private List data; + + /** + * 上一页页码 + */ + private int prePage; + + /** + * 是否有上一页 + */ + private boolean hasPrevious; + + /** + * 当前页 + */ + private int nowPage; + + /** + * 下一页页码 + */ + private int nextPage; + + /** + * 是否有下一页 + */ + private boolean hasNext; + + /** + * 每页条数 + */ + private int pageSize; + + /** + * 总页数 + */ + private int totalPage; + + /** + * 总数据条数 + */ + private int totalCount; + + public ListPage(List data, int nowPage, int pageSize) { + this.data = data; + this.pageSize = pageSize; + this.nowPage = nowPage; + this.totalCount = data.size(); + this.totalPage = (totalCount + pageSize - 1) / pageSize; + this.prePage = nowPage-1>1? nowPage-1:1; + this.nextPage = nowPage>=totalPage? totalPage: nowPage + 1; + this.hasPrevious = nowPage!=prePage; + this.hasNext = nowPage!=nextPage; + } + + /** + * 当前页数据 + * + * @return List + */ + public List getPageList() { + int fromIndex = (nowPage - 1) * pageSize; + if (fromIndex >= data.size()) { + return Collections.emptyList(); + } + if(fromIndex<0){ + return Collections.emptyList(); + } + int toIndex = nowPage * pageSize; + if (toIndex >= data.size()) { + toIndex = data.size(); + } + return data.subList(fromIndex, toIndex); + } + + public List getData() { + return data; + } + + public int getPrePage() { + return prePage; + } + + public boolean isHasPrevious() { + return hasPrevious; + } + + public int getNowPage() { + return nowPage; + } + + public int getNextPage() { + return nextPage; + } + + public boolean isHasNext() { + return hasNext; + } + + public int getPageSize() { + return pageSize; + } + + public int getTotalPage() { + return totalPage; + } + + public int getTotalCount() { + return totalCount; + } +} diff --git a/src/main/java/cc/ryanc/halo/model/enums/BlogPropertiesEnum.java b/src/main/java/cc/ryanc/halo/model/enums/BlogPropertiesEnum.java index 1511c1480..acca50edf 100644 --- a/src/main/java/cc/ryanc/halo/model/enums/BlogPropertiesEnum.java +++ b/src/main/java/cc/ryanc/halo/model/enums/BlogPropertiesEnum.java @@ -30,6 +30,11 @@ public enum BlogPropertiesEnum { */ INDEX_POSTS("index_posts"), + /** + * 每页评论条数 + */ + INDEX_COMMENTS("index_comments"), + /** * 是否已经安装 */ diff --git a/src/main/java/cc/ryanc/halo/utils/CommentUtil.java b/src/main/java/cc/ryanc/halo/utils/CommentUtil.java index 0c99b7b2d..abd748451 100644 --- a/src/main/java/cc/ryanc/halo/utils/CommentUtil.java +++ b/src/main/java/cc/ryanc/halo/utils/CommentUtil.java @@ -3,6 +3,7 @@ package cc.ryanc.halo.utils; import cc.ryanc.halo.model.domain.Comment; import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -33,6 +34,8 @@ public class CommentUtil { for (Comment comment : commentsResult) { comment.setChildComments(getChild(comment.getCommentId(), commentsRoot)); } + //集合倒序,最新的评论在最前面 + Collections.reverse(commentsResult); return commentsResult; } diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java index 603b3bd09..06806f993 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java @@ -4,6 +4,7 @@ import cc.ryanc.halo.model.domain.Comment; import cc.ryanc.halo.model.domain.Post; import cc.ryanc.halo.model.domain.Tag; import cc.ryanc.halo.model.dto.HaloConst; +import cc.ryanc.halo.model.dto.ListPage; import cc.ryanc.halo.model.enums.*; import cc.ryanc.halo.service.CommentService; import cc.ryanc.halo.service.PostService; @@ -22,6 +23,7 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import java.util.ArrayList; import java.util.Date; @@ -109,7 +111,9 @@ public class FrontArchiveController extends BaseController { * @return 模板路径/themes/{theme}/post */ @GetMapping(value = "{postUrl}") - public String getPost(@PathVariable String postUrl, Model model) { + public String getPost(@PathVariable String postUrl, + @RequestParam(value = "cp",defaultValue = "1") Integer cp, + Model model) { Post post = postService.findByPostUrl(postUrl, PostTypeEnum.POST_TYPE_POST.getDesc()); if (null == post || !post.getPostStatus().equals(PostStatusEnum.PUBLISHED.getCode())) { return this.renderNotFound(); @@ -141,9 +145,17 @@ public class FrontArchiveController extends BaseController { tagWords.add(tag.getTagName()); } } + //默认显示10条 + Integer size = 10; + //获取每页评论条数 + if (!StringUtils.isBlank(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_COMMENTS.getProp()))) { + size = Integer.parseInt(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_COMMENTS.getProp())); + } + //评论分页 + ListPage commentsPage = new ListPage(CommentUtil.getComments(comments),cp, size); model.addAttribute("is_post",true); model.addAttribute("post", post); - model.addAttribute("comments", CommentUtil.getComments(comments)); + model.addAttribute("comments", commentsPage); model.addAttribute("commentsCount", comments.size()); model.addAttribute("tagWords", CollUtil.join(tagWords, ",")); postService.updatePostView(post); diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java index a0bf81127..ae6fa8bba 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java @@ -4,6 +4,7 @@ import cc.ryanc.halo.model.domain.Comment; import cc.ryanc.halo.model.domain.Gallery; import cc.ryanc.halo.model.domain.Post; import cc.ryanc.halo.model.dto.HaloConst; +import cc.ryanc.halo.model.dto.ListPage; import cc.ryanc.halo.model.enums.BlogPropertiesEnum; import cc.ryanc.halo.model.enums.CommentStatusEnum; import cc.ryanc.halo.model.enums.PostTypeEnum; @@ -19,6 +20,7 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @@ -72,7 +74,9 @@ public class FrontPageController extends BaseController { * @return 模板路径/themes/{theme}/post */ @GetMapping(value = "/p/{postUrl}") - public String getPage(@PathVariable(value = "postUrl") String postUrl, Model model) { + public String getPage(@PathVariable(value = "postUrl") String postUrl, + @RequestParam(value = "cp",defaultValue = "1") Integer cp, + Model model) { Post post = postService.findByPostUrl(postUrl, PostTypeEnum.POST_TYPE_PAGE.getDesc()); if (null == post) { return this.renderNotFound(); @@ -83,9 +87,17 @@ public class FrontPageController extends BaseController { } else { comments = commentService.findCommentsByPostAndCommentStatusNot(post, CommentStatusEnum.RECYCLE.getCode()); } + //默认显示10条 + Integer size = 10; + //获取每页评论条数 + if (!StringUtils.isBlank(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_COMMENTS.getProp()))) { + size = Integer.parseInt(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_COMMENTS.getProp())); + } + //评论分页 + ListPage commentsPage = new ListPage(CommentUtil.getComments(comments),cp, size); model.addAttribute("is_page",true); model.addAttribute("post", post); - model.addAttribute("comments", CommentUtil.getComments(comments)); + model.addAttribute("comments", commentsPage); model.addAttribute("commentsCount", comments.size()); postService.updatePostView(post); return this.render("page"); diff --git a/src/main/resources/templates/admin/admin_option.ftl b/src/main/resources/templates/admin/admin_option.ftl index 94653338c..ffd4bcec8 100755 --- a/src/main/resources/templates/admin/admin_option.ftl +++ b/src/main/resources/templates/admin/admin_option.ftl @@ -287,6 +287,16 @@ +
+ +
+ +
+
diff --git a/src/main/resources/templates/common/comment/_native_comment.ftl b/src/main/resources/templates/common/comment/_native_comment.ftl index e1608cf75..8b9e36275 100644 --- a/src/main/resources/templates/common/comment/_native_comment.ftl +++ b/src/main/resources/templates/common/comment/_native_comment.ftl @@ -213,16 +213,20 @@ } .native-nav{ - padding: 10px 0; + padding: 10px 0!important;; } .page-nav{ - margin: 20px 0; - padding: 0 10px; - list-style: none; - text-align: center; + margin: 20px 0!important;; + padding: 0 10px!important;; + list-style: none!important;; + text-align: center!important;; } .page-nav li{ - display: inline-block; + display: inline-block!important; + padding: 0 10px!important; + } + .page-nav li a{ + text-decoration: #0a001f!important; } ${options.native_css?if_exists} @media screen and (max-width: 560px) { @@ -292,9 +296,9 @@ -
    - <#if comments?? && comments?size gt 0> - <#list comments?sort_by("commentDate")?reverse as comment> +
      + <#if comments?? && comments.getPageList()?size gt 0> + <#list comments.getPageList()?sort_by("commentDate")?reverse as comment>
    • @@ -320,12 +324,25 @@
    - <#--
    --> - <#----> - <#--
    --> +
    + <#if comments.totalPage gt 1> + + +