From 6fbac8efa5662ac933ab72f9121860b9cb08c025 Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Wed, 06 Jul 2022 20:05:52 +0800 Subject: [PATCH] finish @page --- src/main/java/com/xcong/farmer/cms/core/tag/TagsEnum.java | 2 src/main/java/com/xcong/farmer/cms/core/tag/data/PageChildData.java | 34 ++++ /dev/null | 47 ------ src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java | 10 + src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java | 95 +++++++++++++ src/main/java/com/xcong/farmer/cms/core/tag/data/PageData.java | 88 ++++++++++++ src/main/java/com/xcong/farmer/cms/core/tag/model/Pagination.java | 88 ++++++++++++ 7 files changed, 316 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java b/src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java index e886cb3..5ad116f 100644 --- a/src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java +++ b/src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java @@ -1,15 +1,110 @@ package com.xcong.farmer.cms.core.handler; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xcong.farmer.cms.configurations.properties.CmsProperties; import com.xcong.farmer.cms.core.node.AttrNode; +import com.xcong.farmer.cms.core.node.Template; +import com.xcong.farmer.cms.core.tag.data.PageChildData; +import com.xcong.farmer.cms.core.tag.data.PageData; +import com.xcong.farmer.cms.core.tag.model.Article; +import com.xcong.farmer.cms.core.tag.model.Pagination; +import com.xcong.farmer.cms.modules.system.entity.ArticleEntity; +import com.xcong.farmer.cms.modules.system.mapper.ArticleMapper; +import com.xcong.farmer.cms.utils.SpringContextHolder; +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.List; /** * @author wzy * @date 2022-07-05 **/ +@Slf4j public class PageDataParserHandler implements DataParserHandler { + private ArticleMapper articleMapper = SpringContextHolder.getBean(ArticleMapper.class); + private CmsProperties cmsProperties = SpringContextHolder.getBean(CmsProperties.class); @Override public void dataParser(AttrNode attrNode) { + log.info("分页解析"); + Template.HAS_PAGING = true; + Long companyId = (Long) attrNode.getSystemDataValue("companyId"); + Pagination param = (Pagination) attrNode.getParam(); + + Page<ArticleEntity> page = new Page<>(Integer.parseInt(param.getPage()), Integer.parseInt(param.getLimit())); + ArticleEntity article = new ArticleEntity(); + article.setColumnCode(param.getCode()); + article.setCompanyId(companyId); + IPage<ArticleEntity> pageList = articleMapper.selectArticleInPage(page, article); + + PageData pageData = new PageData(); + pageData.setTotalPage((int) pageList.getPages()); + pageData.setIndex(Integer.parseInt(param.getPage())); + pageData.setTotalCnt((int) pageList.getSize()); + + if (CollUtil.isNotEmpty(pageList.getRecords())) { + String path = cmsProperties.getBaseUrl() + "/" + param.getCode(); + String filename = "index_{}.html"; + + List<PageChildData> list = new ArrayList<>(); + int pageNo = Integer.parseInt(param.getPage()); + + // 计算出页面显示分页的最大和最小值 + int[] startAndEnd = pageStartAndEnd(pageNo, (int) pageList.getPages(), Integer.parseInt(param.getSize())); + for (int i = startAndEnd[0]; i <= startAndEnd[1] ; i++) { + PageChildData child = new PageChildData(); + child.setIndex(i); + if (pageNo == 1) { + child.setPath(path + "/index.html"); + } else { + child.setPath(path + "/" + StrUtil.format(filename, i)); + } + list.add(child); + } + + pageData.setChildren(list); + } else { + pageData.setNext("javascript:void(0)"); + pageData.setPrev("javascript:void(0)"); + } + + if (Integer.parseInt(param.getPage()) == pageList.getPages()) { + Template.HAS_PAGING = false; + } + + attrNode.setData(pageData); } + + /** + * (x + y)/2 = index + * y - x= size 解二元一次方程 + * + * @param index 当前页码 + * @param totalPage 总页数 + * @param size 分页大小 + * @return + */ + public int[] pageStartAndEnd(int index, int totalPage, int size) { + int[] page = new int[2]; + int end = ((index * 2) + size) / 2;; + + int start = end - size + 1; + if (start < 1) { + start = 1; + } + + if (end > totalPage) { + end = totalPage; + } + + page[0] = start; + page[1] = end; + return page; + } + } diff --git a/src/main/java/com/xcong/farmer/cms/core/tag/TagsEnum.java b/src/main/java/com/xcong/farmer/cms/core/tag/TagsEnum.java index 6445382..675afe9 100644 --- a/src/main/java/com/xcong/farmer/cms/core/tag/TagsEnum.java +++ b/src/main/java/com/xcong/farmer/cms/core/tag/TagsEnum.java @@ -10,7 +10,7 @@ ARTICLES("@articles", "com.xcong.farmer.cms.core.tag.model.Articles", "com.xcong.farmer.cms.core.handler.ArticlesDataParserHandler",2), ARTICLE("@article", "com.xcong.farmer.cms.core.tag.model.Article", "com.xcong.farmer.cms.core.handler.ArticleDataParserHandler",2), CHILD("@child", "com.xcong.farmer.cms.core.tag.model.Child", "com.xcong.farmer.cms.core.handler.ChildDataParserHandler",2), - PAGE("@page", "com.xcong.farmer.cms.core.tag.model.Page", "com.xcong.farmer.cms.core.handler.PageDataParserHandler",2), + PAGE("@page", "com.xcong.farmer.cms.core.tag.model.Pagination", "com.xcong.farmer.cms.core.handler.PageDataParserHandler",2), // AD("@ad", "com.xcong.farmer.cms.core.tag.model.Ad", "",2), // COLUMNS("@columns", "com.xcong.farmer.cms.core.tag.model.Columns", "",2), COLUMN("@column", "com.xcong.farmer.cms.core.tag.model.Column", "com.xcong.farmer.cms.core.handler.ColumnDataParserHandler",2); diff --git a/src/main/java/com/xcong/farmer/cms/core/tag/data/PageChildData.java b/src/main/java/com/xcong/farmer/cms/core/tag/data/PageChildData.java new file mode 100644 index 0000000..d7191d4 --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/core/tag/data/PageChildData.java @@ -0,0 +1,34 @@ +package com.xcong.farmer.cms.core.tag.data; + +/** + * @author wzy + * @date 2022-07-06 + **/ +public class PageChildData { + + /** + * 页码 + */ + private int index; + + /** + * 链接 + */ + private String path; + + public int getIndex() { + return index; + } + + public void setIndex(int index) { + this.index = index; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } +} diff --git a/src/main/java/com/xcong/farmer/cms/core/tag/data/PageData.java b/src/main/java/com/xcong/farmer/cms/core/tag/data/PageData.java new file mode 100644 index 0000000..444dd27 --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/core/tag/data/PageData.java @@ -0,0 +1,88 @@ +package com.xcong.farmer.cms.core.tag.data; + +import java.util.List; + +/** + * @author wzy + * @date 2022-07-06 + **/ +public class PageData { + + /** + * 当前页 + */ + private Integer index; + + /** + * 下一页链接 + */ + private String next; + + /** + * 上一页链接 + */ + private String prev; + + /** + * 总页数 + */ + private int totalPage; + + /** + * 总条数 + */ + private int totalCnt; + + /** + * 页码 + */ + private List<PageChildData> children; + + public List<PageChildData> getChildren() { + return children; + } + + public void setChildren(List<PageChildData> children) { + this.children = children; + } + + public Integer getIndex() { + return index; + } + + public void setIndex(Integer index) { + this.index = index; + } + + public String getNext() { + return next; + } + + public void setNext(String next) { + this.next = next; + } + + public String getPrev() { + return prev; + } + + public void setPrev(String prev) { + this.prev = prev; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public int getTotalCnt() { + return totalCnt; + } + + public void setTotalCnt(int totalCnt) { + this.totalCnt = totalCnt; + } +} diff --git a/src/main/java/com/xcong/farmer/cms/core/tag/model/Page.java b/src/main/java/com/xcong/farmer/cms/core/tag/model/Page.java deleted file mode 100644 index d16bc79..0000000 --- a/src/main/java/com/xcong/farmer/cms/core/tag/model/Page.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.xcong.farmer.cms.core.tag.model; - -/** - * @author wzy - * @date 2022-07-05 - **/ -public class Page { - - /** - * 栏目ID - */ - private String colId; - - /** - * 分页数字显示几个 - */ - private String size; - - /** - * 对象名称 - */ - private String field; - - public String getColId() { - return colId; - } - - public void setColId(String colId) { - this.colId = colId; - } - - public String getSize() { - return size; - } - - public void setSize(String size) { - this.size = size; - } - - public String getField() { - return field; - } - - public void setField(String field) { - this.field = field; - } -} diff --git a/src/main/java/com/xcong/farmer/cms/core/tag/model/Pagination.java b/src/main/java/com/xcong/farmer/cms/core/tag/model/Pagination.java new file mode 100644 index 0000000..206e281 --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/core/tag/model/Pagination.java @@ -0,0 +1,88 @@ +package com.xcong.farmer.cms.core.tag.model; + +/** + * @author wzy + * @date 2022-07-05 + **/ +public class Pagination { + + /** + * 栏目ID + */ + private String colId; + + /** + * 栏目编码 + */ + private String code; + + /** + * 分页数字显示几个 + */ + private String size; + + /** + * 对象名称 + */ + private String field; + + /** + * 每页数量 + */ + private String limit; + + /** + * 页码 + */ + private String page; + + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + + public String getSize() { + return size; + } + + public void setSize(String size) { + this.size = size; + } + + public String getLimit() { + return limit; + } + + public void setLimit(String limit) { + this.limit = limit; + } + + public String getPage() { + return page; + } + + public void setPage(String page) { + this.page = page; + } + + public String getColId() { + return colId; + } + + public void setColId(String colId) { + this.colId = colId; + } + + public String getField() { + return field; + } + + public void setField(String field) { + this.field = field; + } +} diff --git a/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java b/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java index 6fec7de..b3f748a 100644 --- a/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java +++ b/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java @@ -34,6 +34,16 @@ this.templateLoader.data(map); Template template = template(templateName); template.output(this.outputPath); + + // 判断是否有分页,有则执行。从第二页开始 + int i = 2; + while(Template.HAS_PAGING) { + map.put("page", i); + this.templateLoader.data(map); + Template pageTemplate = template(templateName); + pageTemplate.output(this.outputPath); + i++; + } } public Template template(String templateName) { -- Gitblit v1.9.1