src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/xcong/farmer/cms/core/tag/TagsEnum.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/xcong/farmer/cms/core/tag/data/PageChildData.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/xcong/farmer/cms/core/tag/data/PageData.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/xcong/farmer/cms/core/tag/model/Page.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/xcong/farmer/cms/core/tag/model/Pagination.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java | ●●●●● patch | view | raw | blame | history |
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; } } 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); src/main/java/com/xcong/farmer/cms/core/tag/data/PageChildData.java
New file @@ -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; } } src/main/java/com/xcong/farmer/cms/core/tag/data/PageData.java
New file @@ -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; } } src/main/java/com/xcong/farmer/cms/core/tag/model/Page.java
File was deleted src/main/java/com/xcong/farmer/cms/core/tag/model/Pagination.java
New file @@ -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; } } 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) {